1

current_usersの会話に簡単にアクセスできるようにしたいと思います。例えば

current_user.conversations

現在のユーザーは送信者または受信者(sender_idまたはrecipient_id)のいずれかである可能性があります

class User < ActiveRecord::Base

  has_many :conversations, :foreign_key => "sender_id"

これは機能しますが、送信者が受信者である場合や、たとえば誰かが送信者として誰かに10通のメッセージを送信し、受信者が何にも返信していないが、データベースに会話が存在していると言う場合があります。

そのユーザーとしてログインし、current_user.conversationsと入力した場合、ユーザーモデルで指定された外部キーはsender_idであるため、何も表示されません。両方を指定する方法はありませんか?SQLで「OR」を使用するのが好きですか?

敬具

4

1 に答える 1

1

私はあなたが望むことを正確に行う方法があるとは思いませんが、あなたが考慮したいと思うかもしれないいくつかの代替アプローチがあります:

1)それをsent_conversationsとreceived_conversationsの2つの関係に分割し、それらを組み合わせるメソッドを定義できます。

2)カスタムSQLを実行する新しいクラスメソッドを追加します。

class User < ActiveRecord::Base
  def conversations
    Conversation.where("sender_id = :id OR receiver_id = :id", id: self.id)
  end
end
于 2013-02-03T23:36:18.397 に答える