помогите с acceptpts_nested_attributes_for в рельсах 3 - PullRequest
2 голосов
/ 13 июня 2011

У меня есть следующие модели:

class Address < ActiveRecord::Base
  validates_presence_of :street, postal_code
end

class Person < ActiveRecord::Base
  belongs_to :address
  belongs_to :work_address, :class_name => 'Address'

  accepts_nested_attributes_for :address, :work_address

  def initialize(params={})
    params[:address] = Address.new
    params[:work_address] = Address.new
    super
  end
end

При попытке создать Person:

person = {
  "address_attributes" => {:street => "foo", :postal_code => "45632-963"}
  "work_address_attributes" => {:street => "bar", :postal_code => "45632-964"}
}
Person.create(person)

Я получил объект person с заполненными полями адреса, но поля work_adress пустые,Тем не менее, это работает, когда я пытаюсь:

p.work_address_attributes = {:street => "bar", :postal_code => "45632-964"}

На мой взгляд, у меня есть следующий код:

<%= form_for(@person) do |form| %>
...
<%= form.fields_for :address do |address| %>
  <%= address.text_field :street %>
  <%= address.text_field :postal_code %>
<% end %>

<%= form.fields_for :work_address do |work_address| %>
  <%= work_address.text_field :street %>
  <%= work_address.text_field :postal_code %>
<% end %>

<%= form.submit %>
<% end %>

Что не так?

1 Ответ

0 голосов
/ 13 июня 2011

Вы пытались закомментировать строку в вашей функции инициализации, которая устанавливает params[:work_address] для нового объекта Address?Вам не нужно устанавливать его, если вы используете вложенные атрибуты.Если вам действительно нужны эти две строки, я бы изменил их на что-то вроде этого:

params[:work_address] = Address.new if params[:work_address_attributes].nil?

accepts_nested_attributes_for должно обрабатывать эту логику для васВозможно, ваш адресный объект переопределяет то, что вы передаете в хэш?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...