Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ActiveRecord:如何通过视图中的超级父级获取不重复的子记录?_Ruby On Rails_Ruby_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails ActiveRecord:如何通过视图中的超级父级获取不重复的子记录?

Ruby on rails Rails ActiveRecord:如何通过视图中的超级父级获取不重复的子记录?,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,我有四个表格,分别是专辑,歌曲,歌手和歌曲歌手 Albums { Id, Name } Songs { Id, AlbumId, Name } Singers { Id, Name } SongSingers { Id, SongId, SingerId } 这张专辑有许多歌曲 这首歌属于一张专辑 歌手属于歌曲和歌手 歌曲和歌手有很多歌手 每首歌可能有相同或不同的歌手 鉴于此,我如何通过AlbumId获得所有非重复歌手 谢谢。绝对没问题。 你在找歌手。这就是查询的开始 您对存储在关联中的

我有四个表格,分别是
专辑
歌曲
歌手
歌曲歌手

Albums { Id, Name } 
Songs { Id, AlbumId, Name }
Singers { Id, Name }
SongSingers { Id, SongId, SingerId }
  • 这张专辑有许多歌曲
  • 这首歌属于一张专辑
  • 歌手属于歌曲和歌手
  • 歌曲和歌手有很多歌手
每首歌可能有相同或不同的歌手

鉴于此,我如何通过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