どのメッセージが削除されたかどうかに応じて、ユーザーのメッセージスレッドにメッセージを表示する方法を見つけるのに少し苦労しました。削除されたメッセージ "sender_status または recipient_status" は、メッセージの削除時に 0 から 1 に変わります。現在、受信トレイにユーザーのメッセージスレッドのリストを表示するために、次を使用しています。
例えば
current_user = User.find(2)
current_user.message_threads
これにより、送信者または受信者のステータスが 0 のすべての message_threads が取得されます。
class User < ActiveRecord::Base
has_many :messages
has_many :message_threads
素晴らしく簡単ですが、今やりたいことは、現在のスレッドから送信者または受信者のステータスが0のメッセージを取得できるようにする方法を設定することです. したがって、次のように入力するとします。
one_thread = current_user.message_threads.first
このスレッドから、必要なメッセージだけを簡単に取得できるようにしたいと考えています。最終的に入力できるように、 message_thread モデルに何かを入れたいと思います:
current_user.message_threads.first.messages
#or
one_thread.messages
必要なメッセージのみをロードし、ステータスが「1」のメッセージのみを無視します。
ユーザー モデル:
class User < ActiveRecord::Base
has_many :messages
has_many :message_threads
def message_threads
MessageThread.where([ '(sender_id = ? AND sender_status = 0) OR (recipient_id = ? AND recipient_status = 0)', self.id, self.id ])
end
def messages
Message.where([ '(sender_id = ? AND sender_status = 0) OR (recipient_id = ? AND recipient_status = 0)', self.id, self.id ])
end
MessageThread モデル:
class MessageThread < ActiveRecord::Base
has_many :messages
メッセージ モデル:
class Message < ActiveRecord::Base
acts_as_tree
has_one :message_thread
結合を試してみましたが、うまくいきませんでした。
def messages
joins(:messages).merge( Message.where([ '(parent_id = ? AND sender_status = 0) OR (parent_id = ? AND recipient_status = 0)',self.message_id, self.message_id ]) )
end
助けていただければ幸いです。
敬具