[英]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.