Ruby on Rails where子句有两个表

时间:2013-12-10 13:10:26

标签: ruby-on-rails

我正在使用Ruby on Rails,我有三个模型:

艺术家,专辑,曲目

每首曲目都有一个album_id,每张专辑都有一个artist_id

我想找到特定艺术家的所有曲目,如下所示:

select track.* from  tracks, albums where track.albmum_id==album.id and album.artist_id=5;

所以我希望最终得到可以分页的曲目。

到目前为止,我的最大努力是这个,但它不起作用:

@tracks = Track.joins(:albums).select("track.*").where(artist_id: @artist.id).paginate(page: params[:page])

我得到:ActionView :: Template :: Error(在Track上找不到名为'albums'的关联;也许你拼错了吗?) 我正在使用Rails 4.0.0。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你可以建立这样的关系:

class Artist
  has_many :tracks, :through => :albums

然后,您可以使用:

a = Artist.first
a.tracks

使用has_many through,系统会自动为您构建查询。