fields_for没有获取模型数据

时间:2014-03-23 16:57:37

标签: ruby-on-rails ruby-on-rails-4 nested-forms form-for fields-for

我正在尝试在rails 4 app中使用嵌套属性。我的模型设置如下:

class Person < ActiveRecord::Base
  has_many :addresses
  accepts_nested_attributes_for :addresses
end

class Address < ActiveRecord::Base
  belongs_to :person
end

我的观点是:

<%= form_for(:person, :url => {:action => 'update', :id => @person.id}) do |f| %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <%= f.fields_for(:addresses) do |builder| %>
  <p>
    <%= builder.label :street, "Street" %><br />
    <%= builder.text_field(:street) %>
  </p>
  <% end %>
  <p><%= f.submit "Submit" %></p>
<% end %>

http://guides.rubyonrails.org/form_helpers.html

几乎完全相同

但我的观点并未将builder表单与address模型相关联。它只是渲染表单一次。

我还注意到提交数据不会将params哈希提供为:

{
    :person => {
        :name => 'John Doe',
        :addresses_attributes => {
            '0' => {
                :kind  => 'Home',
                :street => '221b Baker Street',
            },
            '1' => {
                :kind => 'Office',
                :street => '31 Spooner Street'
            }
        }
    }
}

但是喜欢:

{"person"=
  {"name"=>"John Smith", "adresses"=>
    {"street"=>"221 Baker"}
  }
}

我哪里错了?

PS - 控制器...我已经尝试了一个新对象,一个已经存在且具有与之关联的地址。

def nest
  @person = Person.find(48)

  #@person = Person.new
  #4.times { @person.addresses.build }
end

1 个答案:

答案 0 :(得分:1)

问题出现在form_for显然你必须使用resourceful routing并使用form_for这样:

<%= form_for @person do |f| %>

感谢@vee指出来了!