ruby-on-rails – 从一个有很多通过关联获取第一个关联

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 从一个有很多通过关联获取第一个关联前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将每个播放列表的第一首歌曲加入到一系列的播放列表中,并且很难找到一个有效的解决方案.

我有以下型号:

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
原文链接:https://www.f2er.com/ruby/267270.html

猜你在找的Ruby相关文章