Rails ActiveRecord:如何通过超级父视图获取非重复的子记录?
我有四张名为Albums
, Songs
, Singers
和SongSingers
。
Albums { Id, Name } Songs { Id, AlbumId, Name } Singers { Id, Name } SongSingers { Id, SongId, SingerId }
- 专辑有很多歌。
- 歌曲属于专辑。
- SongSinger属于Song and Singer。
- 歌曲和歌手有许多SongSingers。
每首歌可能有相同或不同的歌手。
在View中,如何通过AlbumId获取所有非重复的歌手。
谢谢。
绝对没问题。
- 你在追问歌手。 这就是查询的开始。
-
您对关联存储的歌曲有条件。 我们很快就会需要它。
@album.songs
-
加入歌曲和歌手,以便您可以应用上述条件。 注意:你还在挑选歌手! 只是现在你可以在他们的歌曲上放置条件了。
Singer.joins(:songs)
-
现在应用它:
Singer.joins(:songs).merge(@album.songs) # It's pretty much the same as this, but more concise: Singer.joins(:songs).merge(songs: {album_id: @album.id})
-
现在过滤掉重复项:
Singer.joins(:songs).merge(@album.songs).uniq
完成。
你可以这样做。
class Album < ActiveRecord::Base has_many :songs has_many :song_singers, :through => :songs has_many :singers, :through => :song_singers ... end
在视图中,您现在可以简单地调用它
@album.singers.uniq