我的模特中有这种关系:
class Movie < ActiveRecord::Base
has_many :movie_genres
has_many :genres, through: :movie_genres
end
class MovieGenre < ActiveRecord::Base
belongs_to :movie
belongs_to :genre
end
class Genre < ActiveRecord::Base
has_many :movie_genres
end
所以我正在为电影分配多个流派。此外,模型 MovieGenre 还有其他列/属性,例如&#34; sort_order&#34;其中描述了移动类型的顺序/优先级。到目前为止,我可以检索流派,我可以通过简单地调用 @ movie.genres 或*@movie.movie_genres*来检索关系(MovieGenre-records),但我怎么能加入这两个信息并一起检索它们?
到目前为止,我看到自己被迫为每个类型手动搜索* movie_genre *记录。有没有办法让我可以把它们放在一起,这样我就可以和movie_genre.sort_order一起使用genre.name?
轨道的方式是什么,或者甚至存在一些铁轨魔法?
答案 0 :(得分:2)
你的关联错了:
class Movie < ActiveRecord::Base
has_many :movie_genres
has_many :genres, through: :movie_genres
end
class MovieGenre < ActiveRecord::Base
belongs_to :movie
belongs_to :genre
end
class Genre < ActiveRecord::Base
has_many :movie_genres
has_many :movies, through: :movie_genres
end
我还没有对此进行测试,但你必须在直通模型协会上使用单数。 (而且我已经添加了&#34; has_many:电影&#34;在流派上的对称性。
并阅读属性:
@movie.movie_genres.count # => 3
@movie.movie_genres.first # => MovieGenre
@movie.movie_genres.first.genre # => Genre