私は Rails 3 でメッセージング システムを開発しています。私のデータベース構造はおおよそ次のとおりです。
users:
id
name
messages:
id
body
users_messages:
user_id
message_id
direction
is_read
created_at
リレーションシップ モデルを使用できるようにするには、*has_many :through* アソシエーションを使用する必要があると思います。
class User < ActiveRecord::Base
has_many :user_messages
has_many :messages, :through => :user_messages
end
class UserMessages < ActiveRecord::Base
belongs_to :users
belongs_to :messages
end
class Messages < ActiveRecord::Base
has_many :user_messages
has_many :users, :through => :user_messages
end
呼び出してすべてのユーザーのメッセージを取得しuser.messages
、方向によって着信/発信を検出できます。次のことができる関係をどのように作成するかがよくわかりません。
message.sender
message.recipient
user.messages.first.recipient ...
同様に、各メッセージには、user_messages テーブルに少なくとも 2 つの行が必要です。
user_id_sender , message_id, outgoing ....
user_id_recipient, message_id, incoming ....
私のデータベース構造が間違っているのでしょうか?誰かがより効果的なデザインを提案できますか?
前もって感謝します。