如何在rails中使用多個表繼承來構建對象的嵌套表單?我正在嘗試使用has_many關係的模型創建一個嵌套窗體,以創建一個具有多表繼承功能的另一組模型。我使用formtastic和cocoon作爲嵌套格式,並使用act_as_relation gem來實現多表繼承。具有多個表繼承的嵌套表格
我有以下型號:
class Product < ActiveRecord::Base
acts_as_superclass
belongs_to :store
end
class Book < ActiveRecord::Base
acts_as :product, :as => :producible
end
class Pen < ActiveRecord::Base
acts_as :product, :as => :producible acts_as :product, :as => :producible
end
class Store < ActiveRecord::Base
has_many :products
accepts_nested_attributes_for :products, :allow_destroy => true, :reject_if => :all_blank
end'
在這個例子中,只有獨特的屬性,本書與其他產品相比是一個作者字段。實際上,我有很多獨特的書籍屬性,這就是爲什麼我選擇多表繼承而不是普通單表繼承的原因。
我想創建一個嵌套的表單,允許您創建一個新的商店與產品。這是我的形式:
<%= semantic_form_for @store do |f| %>
<%= f.inputs do %>
<%= f.input :name %>
<h3>Books/h3>
<div id='books'>
<%= f.semantic_fields_for :books do |book| %>
<%= render 'book_fields', :f => book %>
<% end %>
<div class='links'>
<%= link_to_add_association 'add book', f, :books %>
</div>
<% end %>
<%= f.actions :submit %>
<% end %>
而且book_fields部分:
<div class='nested-fields'>
<%= f.inputs do %>
<%= f.input :author %>
<%= link_to_remove_association "remove book", f %>
<% end %>
</div>
我得到這個錯誤:
undefined method `new_record?' for nil:NilClass
基於閱讀GitHub的頁面上的問題進行act_as_relation,我想到了使商店和書籍之間的關係更加明確:
class Product < ActiveRecord::Base
acts_as_superclass
belongs_to :store
has_one :book
accepts_nested_attributes_for :book, :allow_destroy => true, :reject_if => :all_blank
end
class Book < ActiveRecord::Base
belongs_to :store
acts_as :product, :as => :producible
end
class Store < ActiveRecord::Base
has_many :products
has_many :books, :through => :products
accepts_nested_attributes_for :products, :allow_destroy => true, :reject_if => :all_blank
accepts_nested_attributes_for :books, :allow_destroy => true, :reject_if => :all_blank
end
現在,我收到一個無聲的錯誤。我可以使用表格創建新的商店,並且繭讓我可以添加新的書籍字段,但是當我提交商店時,會創建而不是子書。當我瀏覽`/書籍/新書'路線時,我可以創建一個新的書籍記錄,它可以毫無問題地跨越(產品和書籍表)。
是否有解決此問題的方法?其餘代碼可以在here找到。
你檢查params哈希表,看看孩子的書屬性是否正確包含? –