我正在创建一个消息传递系统,其中特定用户可能是一个或多个组织的成员。因此,如果他们登录到组织,他们应该只能看到来自同一组织的用户的对话,但我似乎找不到如何在查询中指明该方式的方法。例如:
recipients = current_org.users
@conversations = current_user.mailbox.inbox.conversations.where(participants.include?(recipients))
......或类似的东西。
答案 0 :(得分:0)
我没有找到一个很好的方法来做到这一点,但这是我做的以备将来参考。我在Mailboxer的Receipts模型的初始化文件中添加了一个class_eval,创建了一个稍微修改过的.recipients范围版本。它会检查集合中是否有多个并且调用.id,这是以前的问题。它还获得了第一个集合的base_class,因为它们都是相同的。
Mailboxer::Receipt.class_eval do
scope :recipients, lambda { |recipient|
if recipient.is_a?(ActiveRecord::Associations::CollectionProxy)
where(:receiver_id => recipient.collect {|x| x.id },:receiver_type => recipient.first.class.base_class.to_s)
else
where(:receiver_id => recipient.id,:receiver_type => recipient.class.base_class.to_s)
end
}
end