如何解决Rails查询,它返回所有与条件完全为零的记录
这是我的协会:
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解决方案吗?!
解决方法
您可以从状态为“打开”的对话行中选择所有这些访问者ID,并在NOT IN子句中使用其访问者ID:
organization.visitors.where.not(
id: Conversation.where(status: 'open').select(:visitor_id)
).count
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。