我有 2 个模型 User 和 Address 。
class User < ActiveRecord::Base
has_many :addresses
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :user
end
我的 Controller
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
还有我的看法
<%= form_for @user do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.fields_for :addresses do |a| %>
<p> Home </p>
<%= a.text_field :state %>
<%= a.text_field :country%>
<%= a.text_field :street %>
<p> Work </p>
<%= a.text_field :state %>
<%= a.text_field :country%>
<%= a.text_field :street %>
<% end %>
<% end %>
<% end %>
我的问题是我只得到在参数中输入的最后一个州、国家、街道。
"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| %>
<p> <%= a.object.label %> </p>
<%= a.text_field :state %>
<%= a.text_field :country%>
<%= a.text_field :street %>
<% end %>
关于ruby-on-rails - 嵌套表单 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887154/