嵌套表单Rails

我有2个型号用户和地址。

class User < ActiveRecord::Base has_many :addresses accepts_nested_attributes_for :addresses end class Address < ActiveRecord::Base belongs_to :user end 

我的控制器

  def new @user = User.new @user.addresses << Address.new @user.addresses << Address.new end def create @user = User.new(params[:user]) if @user.save #do something else render 'new' end end 

而我的观点

      

Home

Work

我的问题是我只获得最后一个州,国家,街道进入参数。

 "addresses_attributes"=>{"0"=>{"street"=>"test", "state"=>"test",, "country"=>"test"}, "1"=>{"street"=>"", "state"=>"", "country"=>""}} 

此外,如果有更好的方法,我会感激任何建议。

rails API表示fields_for将在地址集合中的每个元素上自行重复。

我建议在你的地址中添加一种标签(如工作,家庭等)。 然后它应该自己工作。 使用此标签,当您想要添加更多地址时,您会更灵活一些。

  <%= f.fields_for :addresses, @user.addresses do |a| %> 

<%= a.object.label %>

<%= a.text_field :state %> <%= a.text_field :country%> <%= a.text_field :street %> <% end %>

fields_for:地址已经为你做了循环,所以你不需要重复州,国家和街道。 因此,在您的情况下,您可以添加新的字段地址类型,然后控制器应如下所示:

 def new @user = User.new @user.addresses.build(address_type: 'Home') @user.addresses.build(address_type: 'Work') end 

然后在表格中:

 <%= form_for @user do |f| %> <%= f.label :name %> <%= f.text_field :name %> <%= f.fields_for :addresses do |a| %> <%= a.hidden_field :address_type %> 

<%= a.object.address_type %>

<%= a.text_field :state %> <%= a.text_field :country%> <%= a.text_field :street %> <% end %> <% end %> <% end %>

a.object引用地址对象。