Tôi có tài nguyên Mục và tài nguyên Chủ sở hữu.Làm cách nào để tạo một đối tượng mới tham chiếu thuộc tính lồng nhau hiện có?
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
Vấn đề của tôi là tôi không thể tạo đối tượng Mục mới tham chiếu đối tượng Chủ sở hữu hiện tại.
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=
Tôi biết rằng Item.create(:owner_id => "1")
sẽ hoạt động trong trường hợp này, nhưng tiếc là đây không phải là giải pháp khả thi trong ứng dụng của tôi. Điều này là do tôi đang thêm và xóa các thuộc tính lồng nhau khi đang bay và, ví dụ, cần phải tạo một đối tượng Item mới với một đối tượng Owner hiện có và một đối tượng Owner mới.
tôi tìm thấy những liên kết này nhưng không thể tìm ra nếu điều này là một tính năng hay một lỗi trong đường ray:
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
ai đó có thể cho tôi một ý tưởng như thế nào tôi có thể làm công việc này hoặc tôi đã hiểu sai cách đúng để sử dụng 'accept_nested_attributes_for' ??
Tôi đang sử dụng Rails 3.0.5 và Ruby 1.9.2p0.
Xin cảm ơn trước.
Cảm ơn! Tôi đã không làm việc trên dự án này trong hơn một năm, nhưng câu trả lời của bạn có ý nghĩa. Tôi sẽ thử nó (không quan tâm) khi tôi có một chút thời gian. –