簡體   English   中英

Rails查詢,該查詢返回所有記錄,這些記錄具有與條件完全相關的零記錄

[英]Rails query which returns all records having exactly ZERO associated record with condition

這是我的關聯:

class Insights::Visitor < ActiveRecord::Base
  has_many :conversations,
    class_name: "Chat::Conversation",
    foreign_key: :chat_visitor_id
end

class Chat::Conversations < ActiveRecord::Base
  belongs_to :chat_visitor,
      class_name: "Insights::Visitor",
      foreign_key: "chat_visitor_id"

   enum status: {
      open: "open",
      closed: "closed",
      pending:  "pending",
      spam:  "spam",
      trash: "trash"
    }
end

我的用例非常簡單。 我想在沒有任何打開的對話或訪問者模型的范圍的情況下獲得訪問者計數,該模型將返回所有具有零關聯的對話且狀態為“打開”的訪問者。

目前,我主要使用Ruby來完成此操作,如下所示:

def visitor_count_without_open_conversations
    online_visitors = organization.visitors.includes(:conversations).online
    count = 0
    online_visitors.each do |visitor|
      if visitor.conversations.search_with_status("open").size == 0
        count +=1
      end
     end 
    return count
  end
end

很爛,因為這不是Ruby的好用例。 但是我正在努力弄清楚如何使用SQL做到這一點。

有人可以讓我知道一個很好的,干凈的SQL解決方案嗎?

這是我的關聯:

class Insights::Visitor < ActiveRecord::Base
  has_many :conversations,
    class_name: "Chat::Conversation",
    foreign_key: :chat_visitor_id
end

class Chat::Conversations < ActiveRecord::Base
  belongs_to :chat_visitor,
      class_name: "Insights::Visitor",
      foreign_key: "chat_visitor_id"

   enum status: {
      open: "open",
      closed: "closed",
      pending:  "pending",
      spam:  "spam",
      trash: "trash"
    }
end

我的用例非常簡單。 我想在沒有任何打開的對話或訪問者模型的范圍的情況下獲得訪問者計數,該模型將返回所有具有零關聯的對話且狀態為“打開”的訪問者。

目前,我主要使用Ruby來完成此操作,如下所示:

def visitor_count_without_open_conversations
    online_visitors = organization.visitors.includes(:conversations).online
    count = 0
    online_visitors.each do |visitor|
      if visitor.conversations.search_with_status("open").size == 0
        count +=1
      end
     end 
    return count
  end
end

很爛,因為這不是Ruby的好用例。 但是我正在努力弄清楚如何使用SQL做到這一點。

有人可以讓我知道一個很好的,干凈的SQL解決方案嗎?

暫無
暫無

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

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