如何在rails中将关系属性连接在一起?

时间:2014-04-02 07:18:38

标签: ruby-on-rails ruby activerecord join relation

我的模特中有这种关系:

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.movi​​e_genres*来检索关系(MovieGenre-records),但我怎么能加入这两个信息并一起检索它们?

到目前为止,我看到自己被迫为每个类型手动搜索* movie_genre *记录。有没有办法让我可以把它们放在一起,这样我就可以和movie_genre.sort_order一起使用genre.name?

轨道的方式是什么,或者甚至存在一些铁轨魔法?

1 个答案:

答案 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