Rails ActiveRecord:如何获取父视图中的非重复子记录?
Rails ActiveRecord: how to get non-duplicate child records by super-parent in view?
我有四个表,分别是 Albums
、Songs
、Singers
和 SongSingers
。
Albums { Id, Name }
Songs { Id, AlbumId, Name }
Singers { Id, Name }
SongSingers { Id, SongId, SingerId }
- 专辑中有很多歌曲。
- 歌曲属于专辑。
- SongSinger 属于歌曲和歌手。
- 歌曲和歌手有很多歌手。
每首歌可能有相同或不同的歌手。
在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
我有四个表,分别是 Albums
、Songs
、Singers
和 SongSingers
。
Albums { Id, Name }
Songs { Id, AlbumId, Name }
Singers { Id, Name }
SongSingers { Id, SongId, SingerId }
- 专辑中有很多歌曲。
- 歌曲属于专辑。
- SongSinger 属于歌曲和歌手。
- 歌曲和歌手有很多歌手。
每首歌可能有相同或不同的歌手。
在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