をねじ込み。Railsはプライベートメッセージ
私の 'index'コントローラのアクションでは、送信されたメッセージと受信したメッセージの両方をどのようにクエリしますか?たとえば、User1が '/ users/2/messages /'にヒットした場合、user1とuser2の間の会話全体が表示されます(最初のメッセージの送信者に関係なく)。私は 'スレッド'モデルを追加する必要がありますか、それとも私の現在の構造でこれを達成する方法がありますか?
ありがとうございました。
をねじ込み。Railsはプライベートメッセージ
私の 'index'コントローラのアクションでは、送信されたメッセージと受信したメッセージの両方をどのようにクエリしますか?たとえば、User1が '/ users/2/messages /'にヒットした場合、user1とuser2の間の会話全体が表示されます(最初のメッセージの送信者に関係なく)。私は 'スレッド'モデルを追加する必要がありますか、それとも私の現在の構造でこれを達成する方法がありますか?
ありがとうございました。
チェーン内の一連の相互接続されたメッセージよりも、参加できる会話としてこれを再構成する方がよい場合があります。例えば:
class Conversation < ActiveRecord::Base
has_many :messages
has_many :participants
has_many :users, :through => :participants
end
class Message < ActiveRecord::Base
belongs_to :conversation
end
class Participant < ActiveRecord::Base
belongs_to :conversation
belongs_to :user
end
class User < ActiveRecord::Base
has_many :conversations
has_many :participants
end
メッセージを誰かに送信され、そのための会話を作成し、users
リストに追加することによって、適切な関係者を招待します。
メッセージの親子関係や祖先を使用して、スレッド型メッセージングを追加することもできますが、実際にはほとんどの人には通常、単純な時間順の返信で十分です。
読み取り/未読の状態を追跡するには、ユーザーとメッセージの間の関連付けテーブルが直接必要です。これは難しい場合がありますので、必要がない限り避けてください。
いくつかの名前はRubyまたはRailsによって予約されており、Thread
はその1つであるため、その名前のモデルを持つことはできません。
これを見つけたときに2人のユーザー間で簡単な会話をする方法を探していました。それはうまくいくように見えます。ありがとう!しかし、それは、ユーザーモデルの「has_many:conversations、:through =>:participants」であってはなりませんか? – Vickash
Userモデルの欠落している ':through'についてあなたは正しいです。 'has_many:participants'も持っているはずです。 – tadman
私のアプリでこのモデルを使ったことがありますが、メッセージの作成と返信のためのコントローラを作成するのは本当に苦労しています。簡単な例がありますか?それが良いのであれば、私は新しい質問としてそれを始めることができます。 – Dave