我们说我有四个表,albums
,songs
,tags
和song_tags
,以及他们在Rails中的相关模型,我想要找到所有专辑,其中每首歌都有ids 1,2和3的标签。对于这个例子,让我们说我正在寻找一些锻炼专辑,我希望它们中的每首歌都被标记为&# 34;摇滚","精力充沛"和"乐器"。
有一种简单的方法可以通过少量查询找到它吗?
编辑:
为了澄清,song_tags
是songs
和tags
之间多对多关系的联接表,因此我的关联如下:
#app/models/albums.rb
has_many :songs
#app/models/songs.rb
has_many :song_tags
has_many :tags, through: :song_tags
belongs_to :album
#app/models/tags.rb
has_many :song_tags
has_many :songs, through: :song_tags
#app/models/song_tag.rb
belongs_to :tag
belongs_to :song
答案 0 :(得分:0)
有一种ActiveRecord方法:.includes
API dock
我假设你有以下代码:
#app/models/albums.rb
has_many :songs
#app/models/songs.rb
has_many :tags
belongs_to :album
#app/models/tags.rb
belongs_to :song
has_one :song_tag
#app/models/song_tag.rb
基本上你要做的是从Album类开始链接一个调用。
Album.includes(songs: {tags: :song_tags}).where('song_tags.name = ?', ['instrumental', 'rock', 'energetic'])
有关此问题的更多信息,请访问API.rubyonrails.org