fields_for не получает данные модели

Я пытаюсь начать использовать вложенные атрибуты в моем приложении rails 4. Моя модель настроена так:

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 модель. Это просто рендеринг формы один раз.

Я также заметил, что отправка данных не обеспечивает хэш параметров как:

{
    :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 ответ

Решение

Проблема была в form_for очевидно, вы ДОЛЖНЫ использовать находчивую маршрутизацию и использовать form_for как это:

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

Спасибо @vee за указание на это!

Другие вопросы по тегам