Я столкнулся с этой проблемой в мае Rails 3.0.3 App, я думаю, что это глупая ошибка, но я не могу понять, почему это происходит, или на самом деле, я неправильно понимаю поведение ActiveRecord, и это не совсем ошибка.
Это сценарий, у меня есть три модели:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :addresses, :as => :addressable
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true
belongs_to :address_base
accepts_nested_attributes_for :address_base
end
class AddressBase < ActiveRecord::Base
has_many :address
end
Если я пытаюсь создать экземпляр нового Пользователя, передающего параметры хеша, таким образом:
User.new({"addresses_attributes"=>
{"0"=>
{"number"=>"10",
"complement"=>"Next Starbucks",
"address_base_attributes"=>
{"city"=>"San Francisco",
"zip_code"=>"00010",
"district"=>"San Francisco",
"id"=>"10",
"street"=>"Market St.",
"state"=>"CA"}
}
},
"name"=>"Homer Simpson",
"password_confirmation"=>"[FILTERED]",
"document"=>"123321111",
"password"=>"[FILTERED]",
"email"=>"homer@simpson.com"
})
Я сталкиваюсь с ошибкой
Couldn't find AddressBase with ID=10 for Address with ID=
И это происходит потому, что AddressBase уже существует, а Address не существует, если я удаляю параметр AddressBase.id из хэша, все работает, но я этого не хочу, потому что на этом пути всегда будет создаваться новый регистр для адреса и адресной базы. Мое намерение состоит в том, чтобы повторно использовать общие AddressBase, поэтому сценарий нового Address с существующей AddressBase будет необходим.
Теперь это мои сомнения, мне не хватает какого-то параметра в хэше AddressBase ?? Что-то вроде того, чтобы сказать, что запись уже существует? Или это проблема с ассоциациями own_to и has_many ActiveRecord?
Заранее спасибо.