ruby-on-rails – 从一个有很多通过关联获取第一个关联
发布时间:2020-12-16 21:33:51 所属栏目:百科 来源:网络整理
导读:我正在尝试将每个播放列表的第一首歌曲加入到一系列的播放列表中,并且很难找到一个有效的解决方案. 我有以下型号: class Playlist ActiveRecord::Base belongs_to :user has_many :playlist_songs has_many :songs,:through = :playlist_songsendclass Play
我正在尝试将每个播放列表的第一首歌曲加入到一系列的播放列表中,并且很难找到一个有效的解决方案.
我有以下型号: class Playlist < ActiveRecord::Base belongs_to :user has_many :playlist_songs has_many :songs,:through => :playlist_songs end class PlaylistSong < ActiveRecord::Base belongs_to :playlist belongs_to :song end class Song < ActiveRecord::Base has_many :playlist_songs has_many :playlists,:through => :playlist_songs end 我想得到这个: playlist_name | song_name ---------------------------- chill | baby fun | bffs 我有一个很艰难的时间找到一个有效的方法来通过加入来做到这一点. 更新**** 安德拉德(Shane Andrade)带领我走向正确的方向,但我仍然无法得到我所想要的. 这是我能够得到的: playlists = Playlist.where('id in (1,2,3)') playlists.joins(:playlist_songs) .group('playlists.id') .select('MIN(songs.id) as song_id,playlists.name as playlist_name') 这给了我 playlist_name | song_id --------------------------- chill | 1 这是接近的,但我需要第一首歌曲(根据id)的名字. 解决方法
假设你在Postgresql
Playlist. select("DISTINCT ON(playlists.id) playlists.id,songs.id song_id,playlists.name,songs.name first_song_name"). joins(:songs). order("id,song_id"). map do |pl| [pl.id,pl.name,pl.first_song_name] end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |