如何将Mailboxer收件箱限制为特定用户之间的对话?

时间:2016-08-29 17:35:49

标签: ruby-on-rails mailboxer

我正在创建一个消息传递系统,其中特定用户可能是一个或多个组织的成员。因此,如果他们登录到组织,他们应该只能看到来自同一组织的用户的对话,但我似乎找不到如何在查询中指明该方式的方法。例如:

    recipients = current_org.users
    @conversations = current_user.mailbox.inbox.conversations.where(participants.include?(recipients))

......或类似的东西。

1 个答案:

答案 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