これはRuby1.9.3p194で、Rails3.2.8を使用しています
app / models / owner.rb:
class Owner < ActiveRecord::Base
attr_accessible :name
has_many :pets
end
app / models / pet.rb:
class Pet < ActiveRecord::Base
attr_accessible :name, :owner
belongs_to :owner
end
db / migrate / 20120829184126_create_owners_and_pets.rb:
class CreateOwners < ActiveRecord::Migration
def change
create_table :owners do |t|
t.string :name
t.timestamps
end
create_table :pets do |t|
t.string :name
t.integer :owner_id
t.timestamps
end
end
end
さて、今何が起こるか見てください...
# rake db:migrate
# rails console
irb> shaggy = Owner.create(:name => 'Shaggy')
irb> shaggy.pets.build(:name => 'Scooby Doo')
irb> shaggy.pets.build(:name => 'Scrappy Doo')
irb> shaggy.object_id
=> 70262210740820
irb> shaggy.pets.map{|p| p.owner.object_id}
=> [70262210740820, 70262210740820]
irb> shaggy.name = 'Shaggie'
irb> shaggy.name
=> "Shaggie"
irb> shaggy.pets.map{|p| p.owner.name}
=> ["Shaggie", "Shaggie"]
irb> shaggy.save
irb> shaggy.reload
irb> shaggy.object_id
=> 70262210740820
irb> shaggy.pets.map{|p| p.owner.object_id}
=> [70262211070840, 70262211079640]
irb> shaggy.name = "Fred"
irb> shaggy.name
=> "Fred"
irb> shaggy.pets.map{|p| p.ower.name}
=> ["Shaggie", "Shaggie"]
私の質問:ペットオブジェクトが最初に構築/作成されたときだけでなく、それらがから自動ロードされたときでも、レールを取得してshaggy.petsの要素を初期化し、所有者をシャギー(正確なオブジェクト)に設定するにはどうすればよいですか?アソシエーションを介したデータベース?
ボーナスポイント:Rails2.3.5でも機能するようにします。