簡體   English   中英

Rails 5:如果結果與特定記錄相關聯,則查詢將不包括在內

[英]Rails 5: Query which excludes results if they're associated with a specific record

我有兩個模型: PlaylistItem 我想建立一個查詢,該查詢返回除具有特定項目的播放列表以外的所有播放列表。

這些是模型:

class Playlist < ApplicationRecord
  has_many :items
end

class Item < ApplicationRecord
  belongs_to :playlist
end

這是一個無效的查詢,因為可能存在具有指定項目的播放列表,但還有多個列表,如果還有其他項目,則將它們包括在內(這是我不想要的):

Playlist.left_outer_joins(: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 })

這個概念與此類似: https : //stackoverflow.com/a/2686266

我沒有設置可以快速測試此設置,但是我認為您可以使用Rails ActiveRecord子查詢:

Playlist.where.not(id: Item.select(:pl_id).where(id: id_to_exclude))

在此, pl_idItem與播放列表ID對應的屬性名稱。 我還假設id是每個表中的主鍵。 這可能是一種緊湊的結果方法,但從查詢角度來看可能不是最有效的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM