対応するテーブルを持つ Messages および User モデルがあります。
Messages テーブルには、user_from や user_to などのフィールドがあります。
送信者と受信者のユーザー オブジェクトにアクセスできるようにモデルを関連付ける方法:
message.user_from.name
message.user_to.id
...
ありがとう。
対応するテーブルを持つ Messages および User モデルがあります。
Messages テーブルには、user_from や user_to などのフィールドがあります。
送信者と受信者のユーザー オブジェクトにアクセスできるようにモデルを関連付ける方法:
message.user_from.name
message.user_to.id
...
ありがとう。
次のようにメッセージ モデルを更新する必要があります。
belongs_to :user_from, :class_name => "User"
belongs_to :user_to, :class_name => "User"
これにより、ID を介してユーザー テーブルにリンクするメッセージ テーブルの下に対応するフィールドが作成されます。
ユーザー ID を外部キーとしてメッセージ テーブルに格納する場合、関連付けに同じ名前を使用することはできません。しかし、次のように言うことができます。
class Message
belongs_to :from, class: 'User', foreign_key: :user_from
belongs_to :to, class: 'User', foreign_key: :user_from
end
Railsでは、外部キー列名として使用するのがベストプラクティス<assiciation_name>_id
です。その後、単純に使用できます
class Message
belongs_to :user_from, class: 'User' # foreign_key: :user_from_id by default
belongs_to :user_to, class: 'User' # foreign_key: :user_to_id by default
end
私の場合の完全な解決策は次のとおりです。
belongs_to :sender,
:class_name => "User",
:foreign_key => "sender_id",
**:primary_key => "uid"**
belongs_to :recipient,
:class_name => "User",
:foreign_key => "recipient_uid",
**:primary_key => "uid"**
ユーザーIDはユーザーテーブルの主キーではなかったためです。