2017-08-17 19 views
-1

メッセージングシステムには「mailboxer」という名前の宝石を使用しています。 https://github.com/ging/mailboxer 私はメールボックスの会話やメッセージを検索することができるように、「キーワード検索機能」を実装したいと思っています。それは、受信トレイ、送信ボックス、ゴミ箱、または下書きのいずれかでなければなりません。MailboxerのGem in Railsの検索機能を実装する方法

しかし、この宝石は

search_messages(クエリ)

機能を与えているが、それは動作していないようです。

+0

あなたはそれが機能していないと言ってどういう意味ですか?エラーは何ですか?どのように使ってみましたか?あなたの正確な問題は何ですか? – vijoc

+0

こんにちは@vijoc実際に私はその関数を使用して、私は定義されていないメソッド '検索'、 ex - current_user.search_messages( 'テストメール')、ここで 'テストメール'をその関数のクエリとして渡します。 – Gabbar

答えて

0

件名、本文、または受信者/送信者のユーザー名に特定の文字列が含まれているすべての会話を取得するためのfunctionです。シナリオに合わせて微調整したり、github repoで問題を開くことができます。

def conversations_for(query) 
    wildcarded_query = "%#{query}%" 
    user_ids = User.where('CONCAT(first_name, " ", last_name) LIKE :query', query: wildcarded_query).pluck(:id) 
    current_user.mailbox.conversations. 
         joins(:messages). 
         references('mailboxer_conversations, mailboxer_notifications, mailboxer_receipts, messages_mailboxer_conversations, mr, mn'). # To get rid of warnings 
         select('mailboxer_conversations.*, mailbox_type, trashed'). 
         where("mailboxer_notifications.subject LIKE :query 
           OR mailboxer_notifications.body LIKE :query 
           OR mailboxer_notifications.sender_id IN (:user_ids) 
           OR EXISTS (SELECT * FROM mailboxer_receipts mr 
                INNER JOIN mailboxer_notifications mn ON mn.id = mr.notification_id 
                WHERE mn.conversation_id = mailboxer_conversations.id 
                AND mr.notification_id IN (SELECT id FROM mailboxer_notifications 
                          WHERE sender_id = :current_user_id) 
                AND mr.receiver_id IN (:user_ids))", 
           query: wildcarded_query, user_ids: user_ids, current_user_id: current_user.id) 
end 
関連する問題