含糊不清';id';列错误-Rails/Postgresql
不是一个傻瓜。我在问题的底部添加了原因。 我有两种型号,含糊不清';id';列错误-Rails/Postgresql,sql,ruby-on-rails,ruby,postgresql,Sql,Ruby On Rails,Ruby,Postgresql,不是一个傻瓜。我在问题的底部添加了原因。 我有两种型号,Playlist和User,它们都有许多,并且通过第三个表PlaylistUser彼此属于 对于某个播放列表@Playlist,我想打印与@Playlist共享用户的所有其他播放列表的列表。理想情况下,此列表将按其共享的用户数排序 此查询旨在执行此操作,但会导致错误: Playlist.joins(:users).where.not(id: @playlist.id).where(users: {id: @playlist.user_ids
Playlist
和User
,它们都有许多,并且通过第三个表PlaylistUser
彼此属于
对于某个播放列表@Playlist
,我想打印与@Playlist
共享用户的所有其他播放列表的列表。理想情况下,此列表将按其共享的用户数排序
此查询旨在执行此操作,但会导致错误:
Playlist.joins(:users).where.not(id: @playlist.id).where(users: {id: @playlist.user_ids}).group(:id).order('count(*) desc')
型号
class Playlist < ActiveRecord::Base
has_many :playlist_users
has_many :users, :through => :playlist_users
end
class PlaylistUser < ActiveRecord::Base
belongs_to :playlist
belongs_to :user
end
class User < ActiveRecord::Base
has_many :playlist_users
has_many :playlists, :through => :playlist_users
end
更新 我试着回答这个问题。我更新了model.rb文件,如下所示:
class Playlist < ActiveRecord::Base
default_scope { order('playlists.id ASC') }
has_many :playlist_users
has_many :users, :through => :playlist_users
end
class PlaylistUser < ActiveRecord::Base
default_scope { order('playlist_users.id ASC') }
belongs_to :playlist
belongs_to :user
end
class User < ActiveRecord::Base
default_scope { order('users.id ASC') }
has_many :playlist_users
has_many :playlists, :through => :playlist_users
end
class Playlist:播放列表\u用户
结束
类播放列表用户:播放列表\u用户
结束
但是我仍然得到相同的错误。问题在于您的分组。您想按哪个
id
分组?因为您已经加入了两个表,每个表都有一个id
,所以postgres不知道选择哪个表
您可以尝试将
组(:id)
更改为组('playlists.id')
或组('users.id'
)。无论您希望在哪一个上进行分组。我知道的可能重复项并不准确,但可能是这样help@JuanCarlosOropeza我尝试了该解决方案,但没有成功。我建议您首先使用@playlist.user_id
获取@playlist
的所有用户(ID),然后执行类似于playlist.joins的操作(:playlist\u users).其中(user\u id:@playlist.user\u id).组(:playlist\u id).计数(:playlist\u id)
class Playlist < ActiveRecord::Base
default_scope { order('playlists.id ASC') }
has_many :playlist_users
has_many :users, :through => :playlist_users
end
class PlaylistUser < ActiveRecord::Base
default_scope { order('playlist_users.id ASC') }
belongs_to :playlist
belongs_to :user
end
class User < ActiveRecord::Base
default_scope { order('users.id ASC') }
has_many :playlist_users
has_many :playlists, :through => :playlist_users
end