Ruby on rails Can';无法保存普通的多对一嵌套表单

Ruby on rails Can';无法保存普通的多对一嵌套表单,ruby-on-rails,forms,ruby-on-rails-3,Ruby On Rails,Forms,Ruby On Rails 3,我在轨道3上。我有一个型号为的客户机,它有一个地址\u id。在我的Client表单中,我有嵌套的Address字段。以下是表单的地址部分: <%= f.fields_for @client.address do |address_form| %> <div class="field"> <%= address_form.label :line1 %><br /> <%= address_form.text

我在轨道3上。我有一个型号为
的客户机
,它有一个
地址\u id
。在我的
Client
表单中,我有嵌套的
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 %>
我不明白这到底是什么意思,也不明白为什么我会得到它。以下是
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"}
有人能告诉我发生了什么吗?

请看这里:(这是一篇Rails 2.3文章,但也应该适用于Rails 3)

在您的
客户机
模型中,您需要这一行:

接受:address的嵌套属性

另外,将嵌套表单的第一行更改为:


假设您的客户端类中包含以下内容:

accepts_nested_attributes_for :address

我将修改表格如下:

<%= f.fields_for :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
而不是
@client.address
时,
:address
从何而来?Rails已经知道它有一个嵌套的
:address
属性,并且由于您在
client
表单中调用它,它知道将它分配给客户端。类似地,您的
create
控制器方法不需要显式地创建地址记录——只需执行
@client.save
即可为您保存地址记录。
attr_accessible :address_attributes
<%= f.fields_for :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 %>