1
我想從一個嵌套的窗體構建一個多態關係,這個窗體向後是我找到的所有示例。我希望有人指出我的方式的錯誤。Rails 3多態嵌套屬性
class Container < ActiveRecord::Base
belongs_to :content, :polymorphic => true
end
class Notice < ActiveRecord::Base
has_one :container, :as => :content
end
class Form < ActiveRecord::Base
has_one :container, :as => :content
end
似乎大多數人會從通知或表格建立一個集裝箱,但在我的情況下,通知或表格包含的內容(文件位置或幾個數據庫字段)少量所以它是多幹呃從容器中建立通知或表格。
我想我可以通過添加accepts_nested_attributes_for :content
解決,但是這給了我一個unrecognized attribute :notice
當我嘗試創建一個嵌套的通知集裝箱(尋找內容,而不是多態關聯)
我可以手動和明確的做排除像
if params[:container].has_key('notice')
@c = Container.new(params[:container].except(:notice))
嵌套的領域,然後建立,但是,這不是一個味道?有沒有更好的辦法?
謝謝您的閱讀!
嗯。我以爲它會通過simple_fields_for鍵知道要創建什麼對象的方式與我所做的相同。如果我做了你提到的has_one,我就失去了執行Container.find(1).content.get_data的能力,其中get_data已在Notice和Form中定義。 – Questor 2013-04-04 21:22:52
然後你可以改變它來使用STI,並且從一個抽象的Content類繼承Notice和Form。或者,您可以在Container模型中創建幫助程序方法和/或緩存以查找內容。 – PinnyM 2013-04-05 02:56:25
+1爲abstract_class。我與STI一起去了,但會查看.abstract_class = true來刪除重複的字段。謝謝! – Questor 2013-04-09 00:43:38