關於此主題的幾個問題,但我找不到解決我的問題。與STI和設計的嵌套表格
我有(使用單個表繼承)有一個稱爲學生(其中包括)子
學生有一類被稱爲車輛的「HAS_ONE協會一個設計模型稱爲用戶。
我的模型建立:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
class Student < User
has_one :vehicle, :dependent => :destroy
accepts_nested_attributes_for :vehicle, allow_destroy: true
end
class Vehicle < ActiveRecord::Base
belongs_to :student
end
我想創建具有用戶領域,學生字段,然後車輛領域,即嵌套形式是這樣的:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
*** User fields***
<% if @class == "Student" %>
*** Student fields***
<% f.fields_for :vehicle do |builder| %>
*** Vehicle fields***
<%= f.hidden_field :_destroy %>
<%= link_to "remove", '#', class: "remove_fields" %>
<% end %>
<%= link_to_add_fields "Add vehicle", f, :vehicle %>
<% end %>
<% end %>
問題是,我得到一個未定義的方法錯誤:在一個用戶對象車輛。這並不令人驚訝,因爲我並沒有將模型中的車輛實際與用戶相關聯。我只是不知道該怎麼做。
我的用戶/註冊控制器具有以下注冊方法:
# GET /users/sign_up
def new
@class = params[:class]
build_resource({})
respond_with self.resource
end
鑑於遺贈是設置爲User類,我覺得這創造型「用戶」的資源並使其通過以我的觀點,然後不能將它與「車輛」聯繫起來。
有什麼方法可以創建所需的關聯或創建類型爲'student'的資源以傳遞給視圖嗎?
感謝您的回覆Rich。我同意,即使在設計中,你建議的方法也可以工作。我可以創建一個Student對象(和相關的Vehicle對象),但問題是Devise功能不會 – user3711600 2014-09-01 13:23:38
感謝Rich的答覆。我同意你所建議的方法可行,包括設計。但是,這意味着我必須爲User的每個子類創建單獨的控制器和視圖。理想情況下,我會嘗試使用單個控制器和一組視圖(即用戶控制器和視圖)來實現此目的。這將是我認爲非常乾的解決方案。爲了實現這一點,我需要的是能夠通過從用戶控制器的類型學生的設計資源對象到視圖。我不確定這是否可能,但最終這是我的問題。謝謝! – user3711600 2014-09-01 13:32:04