件名、本文、または受信者/送信者のユーザー名に特定の文字列が含まれているすべての会話を取得するための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
あなたはそれが機能していないと言ってどういう意味ですか?エラーは何ですか?どのように使ってみましたか?あなたの正確な問題は何ですか? – vijoc
こんにちは@vijoc実際に私はその関数を使用して、私は定義されていないメソッド '検索'、 ex - current_user.search_messages( 'テストメール')、ここで 'テストメール'をその関数のクエリとして渡します。 – Gabbar