查询以查找用户正在参与的所有邮件

时间:2014-07-28 15:25:30

标签: sql ruby-on-rails

我正在创建一个消息系统。用户可以通过向多个收件人发送消息来开始对话,而这些收件人又可以回复。

我想找到用户参与的所有对话。也就是说。他们创作了一条消息或者是对话中消息的接收者的对话。

目前我的模型看起来像这样

# Message
belongs_to :conversation
belongs_to:user #author
has_many :receipts
has_many :recipients, :through => :receipts

# Conversation
has_many :messages

# User
has_many :receipts
has_many :incoming_messages, through: :receipts, :class => 'Message'

# Receipt
belongs_to :message
belongs_to :user

我想在Conversation上创建一个范围来实现像这样的

Conversation.involving(user) 

不确定如何为此编写scope / sql。感觉就像我需要等效的OR语句。

即。在PSEUDO CODE中

conversations where (messages.recipient_ids include user.id OR  messages.user_id == user.id)

我假设我正确地模拟了系统。如果没有任何更好的架构建议也将非常感激。

任何人都可以帮忙。

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

Conversation.includes(messages: :receipts).where(["messages.user_id = :user_id OR receipts.user_id = :user_id", user_id: user.id])

这是在user_id外键上执行where子句,这样您就不必弄清楚ActiveRecord将为users表分配哪些表别名(因为它将连接两次)。