Sql Rails 5:如果结果为';与特定记录重新关联
我有两种型号:Sql Rails 5:如果结果为';与特定记录重新关联,sql,ruby-on-rails,postgresql,activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,我有两种型号:Playlist和Item。我想建立一个查询,返回所有的播放列表,除了那些有一个特定的项目 这些是模型: class Playlist < ApplicationRecord has_many :items end class Item < ApplicationRecord belongs_to :playlist end class Playlist
Playlist
和Item
。我想建立一个查询,返回所有的播放列表,除了那些有一个特定的项目
这些是模型:
class Playlist < ApplicationRecord
has_many :items
end
class Item < ApplicationRecord
belongs_to :playlist
end
class Playlist
这是一个不起作用的查询,因为可能有包含指定项的播放列表,但也有多个,如果有其他项,则会包含这些项(这是我不想要的):
Playlist.left\u outer\u连接(:items).where.not(items:{uid:id})
作为记录,我的DBMS是PostgreSQL 9.6,可能可以用更好的方式编写,但它应该可以工作:
join_sql = Arel.sql(
"LEFT OUTER JOIN items ON " \
"(items.playlist_id = playlists.uid " \
"AND items.some_id = '#{item.some_id}')"
)
Playlist.where(owner: owner)
.joins(join_sql)
.where(items: { playlist_id: nil })
这个概念与此类似:我没有快速测试的设置,但我认为您可以使用Rails
ActiveRecord
子查询:
Playlist.where.not(id: Item.select(:pl_id).where(id: id_to_exclude))
这里,pl\u id
是与播放列表id相对应的Item
中属性的名称。我还假设id
是每个表中的主键。对于结果来说,这可能是一种紧凑的方法,但从查询的角度来看,可能不是最有效的方法