我使用的是 Rails 3。我有一个模型 Client
,它有一个 address_id
。在我的 Client
表单中,我嵌套了 Address
字段。这是表单的 Address
部分:
<%= f.fields_for @client.address do |address_form| %>
<div class="field">
<%= address_form.label :line1 %><br />
<%= address_form.text_field :line1 %>
</div>
<div class="field">
<%= address_form.label :line2 %><br />
<%= address_form.text_field :line2 %>
</div>
<div class="field">
<%= address_form.label :city %><br />
<%= address_form.text_field :city %>
</div>
<div class="field">
<%= address_form.label :state_id %><br />
<%= select("client[address]", "state_id", State.all.collect {|s| [ s.name, s.id ] }) %>
</div>
<div class="field">
<%= address_form.label :zip %><br />
<%= address_form.text_field :zip %>
</div>
<% end %>
当我尝试保存表单时,我得到以下信息:
Address(#23652762896420) expected, got ActiveSupport::HashWithIndifferentAccess(#23652751466220)
我不明白这到底意味着什么,也不明白为什么我会得到它。 params.inspect
如下所示:
{"commit"=>"Update Client",
"authenticity_token"=>"CBw1fQcsUtXs9x6lKTL4zeoekX1cwuFUrZvZpCShHIc=",
"_method"=>"put",
"utf8"=>"\342\234\223",
"action"=>"update",
"id"=>"16",
"client"=>{"name"=>"Rosie O'Donnell",
"address"=>{"city"=>"Grand Rapids",
"line1"=>"216 Grandville Ave SW",
"zip"=>"49503",
"line2"=>"",
"state_id"=>"1"},
"phone"=>"",
"salon_id"=>"1",
"email"=>""},
"controller"=>"clients"}
有人可以告诉我发生了什么事吗?
最佳答案
请参见此处:http://guides.rubyonrails.org/2_3_release_notes.html#nested-object-forms (这是一篇 Rails 2.3 文章,但它也应该适用于 Rails 3)
在您的 Client
中您需要此行的型号:
accepts_nested_attributes_for :address
此外,将嵌套表单的第一行更改为:
<%= f.fields_for :address do |address_form| %>
关于ruby-on-rails - 无法保存普通的旧多对一嵌套表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795896/