嵌套表单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引用地址对象。