目前,项目 属于 公司和 has_many ItemVariants 。< / p>
我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不会显示表单。它仅在我使用单数时显示。
我检查了我的关联,它们似乎是正确的,它可能与项目嵌套在公司下面有关,还是我错过了其他的东西?
提前致谢。
注意:以下代码段中省略了不相关的代码。
编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。
的routes.rb
resources :companies do
resources :items
end
item.rb的
class Item < ActiveRecord::Base
attr_accessible :name, :sku, :item_type, :comments, :item_variants_attributes
# Associations
#-----------------------------------------------------------------------
belongs_to :company
belongs_to :item_type
has_many :item_variants
accepts_nested_attributes_for :item_variants, allow_destroy: true
end
item_variant.rb
class ItemVariant < ActiveRecord::Base
attr_accessible :item_id, :location_id
# Associations
#-----------------------------------------------------------------------
belongs_to :item
end
项/ new.html.erb
<%= form_for [@company, @item] do |f| %>
...
...
<%= f.fields_for :item_variants do |builder| %>
<fieldset>
<%= builder.label :location_id %>
<%= builder.collection_select :location_id, @company.locations.order(:name), :id, :name, :include_blank => true %>
</fieldset>
<% end %>
...
...
<% end %>
答案 0 :(得分:7)
您应该使用一些数据预填充@item.item_variants
:
def new # in the ItemController
...
@item = Item.new
3.times { @item.item_variants.build }
...
end
来源:http://rubysource.com/complex-rails-forms-with-nested-attributes/
答案 1 :(得分:2)
试试这种方式
item controller
new action
写
def new
...
@item = # define item here
@item.item_variants.build if @item.item_variants.nil?
...
end
并在item/new.html.erb
<%= form_for @item do |f| %>
...
...
<%= f.fields_for :item_variants do |builder| %>
...
<% end %>
...
...
<% end %>
了解更多视频 - Nested Model Form