> Drummer.all
=> [#<Drummer id: 1, first_name: "Jojo", video_id: nil, created_at: "2010-12-10 11:04:48", updated_at: "2010-12-10 11:04:48">]
> Video.all
=> [#<Video id: 1, title: "JojoVideo1", drummer_id: "1", created_at: "2010-12-10 11:04:48", updated_at: "2010-12-10 11:04:48">]
> Video.all.first.drummer
=> #<Drummer id: 1, first_name: "Jojo", video_id: nil, created_at: "2010-12-10 11:04:48", updated_at: "2010-12-10 11:04:48">
> Video.all.first.drummers
=> []
И из test / development.log:
Video Load (0.3ms) SELECT "videos".* FROM "videos"
Drummer Load (0.3ms) SELECT "drummers".* FROM "drummers" WHERE ("drummers"."id" = 1) LIMIT 1
Video Load (0.3ms) SELECT "videos".* FROM "videos"
Drummer Load (0.3ms) SELECT "drummers".* FROM "drummers" WHERE ("drummers".video_id = 1)
Video.all.first.drummer работает, потому что он найден при переходе к видео и проверке их идентификатора барабанщика.Другой не работает, потому что он пытается найти барабанщиков с video_id, и способ, которым мы создали видео, не устанавливал video_id барабанщика.
Мы можем создать пару видео / барабанщик с противоположной проблемой:
d = Drummer.first
d.create_video(:title => "JojoVideo2")
d.save
Это новое видео хорошо работает для барабанщиков, но плохо для барабанщика - потому что на этот раз у барабанщика есть video_id, но у видео нет drummer_id.
Практический результат которогочто ты должен делать то, что сказал Рохит:)