Mam zasób Item i zasoby właściciela.Jak utworzyć nowy obiekt, odwołując się do istniejącego zagnieżdżonego atrybutu?
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
Mój problem polega na tym, że nie mogę utworzyć nowego obiektu Item odwołującego się do istniejącego obiektu właściciela.
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=
Jestem świadomy, że Item.create(:owner_id => "1")
będzie działać w tym przypadku, ale niestety to nie jest dobrym rozwiązaniem w mojej aplikacji. Jest tak dlatego, że dodajemy i usuwam zagnieżdżone atrybuty w locie i na przykład trzeba utworzyć nowy obiekt Item z jednym istniejącym właścicielem obiektu i jednym nowym obiektem właściciela.
znalazłem te linki, ale nie może działać, jeśli jest to cecha lub błąd w szynach:
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
Czy ktoś mógłby dać mi pomysł, w jaki sposób dokonać tej pracy lub czy źle zrozumiałem prawidłowy sposób używania "accepts_nested_attributes_for" ??
Używam Rails 3.0.5 i Ruby 1.9.2p0.
Z góry dziękuję.
Dzięki! Nie pracowałem nad tym projektem od ponad roku, ale twoja odpowiedź ma sens. Wypróbuję to (bez zainteresowania), kiedy będę miał chwilę. –