Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 从一个有很多通过关联获取第一个关联全部内容,希望文章能够帮你解决ruby-on-rails – 从一个有很多通过关联获取第一个关联所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。