在视图中没有显示fields_for has_many关联的复数

时间:2012-10-20 11:29:53

标签: ruby-on-rails ruby ruby-on-rails-3 nested-attributes fields-for

目前,项目 属于 公司 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 %>

2 个答案:

答案 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

相关问题