ActiveRecord具有计数查询条件



我有两个模型:ConversationMessage我需要检索属于Brand的所有对话,其中至少有一条来自品牌的消息和一条来自影响者的消息

这是我的查询:

Conversation.includes(:messages)
.joins(:messages)
.group("conversations.id, messages.id")
.where("conversations.brand_id = ?", brand_id)           
.having("COUNT(messages.authorable_type = 'Influencer') > 0 AND COUNT(messages.authorable_type = 'BrandMember') > 0")
.limit(10)

但是我得到的对话没有来自双方的消息…请问我做错了什么?

问题出在COUNT表达式。

注意COUNT计数所有NON-NULL值。在您的情况下,您将COUNT的一些条件表达式计算为TRUEFALSE,而不是NULL

最懒的解决方案是这样的:

COUNT(messages.authorable_type = 'Influencer' OR NULL)

最新更新