Tengo un recurso de artículo y un recurso de propietario.¿Cómo creo un nuevo objeto que haga referencia a un atributo anidado existente?
rails g scaffold Item name:string
rails g scaffold Owner name:string
class Item < ActiveRecord::Base
has_one :owner
accepts_nested_attributes_for :owner
end
class Owner < ActiveRecord::Base
belongs_to :item
end
Mi problema es que no puedo crear un nuevo objeto Item que haga referencia a un objeto propietario existente.
In /db/migrate/create_owners.rb
def self.up
...
t.integer :item_id
end
rake db:migrate
rails c
ruby-1.9.2-p0 > o= Owner.create(:name => "Test")
=> #<Owner id: 1, name: "Test", created_at: "...", updated_at: "...">
ruby-1.9.2-p0 > i= Item.create(:owner_attributes => {"id" => Owner.last.id.to_s})
ActiveRecord::RecordNotFound: Couldn't find Owner with ID=1 for Item with ID=
Soy consciente de que Item.create(:owner_id => "1")
funcionaría en este caso, pero por desgracia no esta una solución viable en mi aplicación. Esto se debe a que estoy agregando y eliminando atributos anidados sobre la marcha y, por ejemplo, necesito crear un nuevo objeto Item con un objeto Owner existente y un nuevo objeto Owner.
He encontrado estos enlaces, pero no pude averiguar si se trata de una característica o un error en rieles:
https://rails.lighthouseapp.com/projects/8994/tickets/4254-assigning-nested-attributes-fails-for-new-object-when-id-is-specified
http://osdir.com/ml/RubyonRails:Core/2011-05/msg00001.html
Puede alguien dar una idea de cómo puedo hacer este trabajo o ¿He entendido mal la forma correcta de usar 'accepts_nested_attributes_for'?
Estoy usando Rails 3.0.5 y Ruby 1.9.2p0.
Gracias de antemano.
Gracias! No he trabajado en este proyecto por más de un año, pero tu respuesta tiene sentido. Lo probaré (sin interés) cuando tenga un momento. –