2016-08-29 6 views
0

私は、特定のユーザーが1つ以上の組織のメンバーであるかもしれないメッセージングシステムを作成しています。したがって、組織にサインインしている場合は、同じ組織のユーザーとの会話しか見ることができませんが、クエリで指定する方法を見つけることはできません。たとえば、メールボックスの受信トレイを特定のユーザー間の会話に制限するにはどうすればよいですか?

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

などです。

答えて

0

これを行うには素晴らしい方法はありませんでしたが、これは今後の参考にしたものです。 MailboxerのReceiptsモデルのinitializerファイルにclass_evalを追加し、.recipientsスコープのわずかに変更されたバージョンを作成しました。それはコレクションに複数のものがあるかどうかをチェックし、その前に問題だった.idを呼び出します。また、コレクションの最初のbase_classはすべて同じになるので、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 
関連する問題