Rails ActiveRecord:如何获取父视图中的非重复子记录?

Rails ActiveRecord: how to get non-duplicate child records by super-parent in view?

我有四个表,分别是 AlbumsSongsSingersSongSingers

Albums { Id, Name } 
Songs { Id, AlbumId, Name }
Singers { Id, Name }
SongSingers { Id, SongId, SingerId }

每首歌可能有相同或不同的歌手。

在View中,如何通过AlbumId获取所有不重复的歌手。

谢谢。

绝对没问题。

  1. 您查询的是歌手。这就是查询的开头。
  2. 您对关联存储的歌曲有条件。我们很快就会需要它。

    @album.songs
    
  3. 加入歌曲和歌手,即可应用以上条件。注意:您仍在选择歌手!只是现在可以给他们的歌曲附加条件了

    Singer.joins(:songs)
    
  4. 立即申请:

    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})
    
  5. 现在过滤重复项:

    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