Rails 4 - 如何在同一个模型上使用 "belongs_to" 两次(一次使用 "foreign_key")?

Rails 4 - how to use "belongs_to" on the same model twice (once with using "foreign_key")?

我有一个模型Message:

class Message < ActiveRecord::Base
  belongs_to ...
  belongs_to ...
  belongs_to :user

  belongs_to :user,  class_name: "User",  foreign_key: "accepted_denied_by_user_id"
end

使用此设置,如果我调用:

message.user.email

我收到了接受消息的用户的电子邮件,但没有收到消息发送者的电子邮件。

如果我删除这一行:

 belongs_to :user,  class_name: "User",  foreign_key: "accepted_denied_by_user_id"

并致电:

message.user.email

我收到了发送消息的用户的电子邮件。

如何获取发件人和收件人的电子邮件?

我试过了

message.accepted_denied_by_user.email

但这会导致

undefined method `accepted_denied_by_user' for ...

谢谢。

应该是这样的:

belongs_to :user

belongs_to :accepted_denied_by_user,  class_name: "User",  foreign_key: "accepted_denied_by_user_id"

现在您应该可以为特定情况调用 message.user.emailmessage.accepted_denied_by_user.email

您需要用不同的名称命名第二个关联:

belongs_to :denied_user,  class_name: "User",  foreign_key: "accepted_denied_by_user_id"

然后您将能够获得如下信息:

message.denied_user.email

你不应该给两个(或更多)协会同名。

当您执行 belongs_to :user 时,它会自动查找 User 模型。 但是当你想再次关联它时 - 只需给它一些其他名称,然后指定 class_name: "User" - 所以它仍然在 User 模型中查找,但使用你指定的 foreign_key