has_one有两个外键?

我有两个类Message和User。 邮件具有sender_id和recipient_id两个用户的外键。 如何构建关系,我将能够为发件人和收件人获取用户,例如@ message.sender.name和@ message.recipient.name

我试着这样做:

class Message  'User', :foreign_key => 'sender' belongs_to :recipient, :class_name => 'User', :foreign_key => 'recipient' end class User  'Message', :foreign_key => 'recipient' has_many :send_messages, :class_name => 'Message', :foreign_key => 'sender' end 

但它没有帮助,当我试图访问,例如,@ message.recipient.name它说“未定义的方法`名称’”

您可以使用:class_name属性设置用于外键的类:

 class Message < ActiveRecord::Base has_one :sender, :class_name => User has_one :recipient, :class_name => User end class User < ActiveRecord::Base belongs_to :sent_messages, :class_name => Message belongs_to :received_messages, :class_name => Message end 

此外,您说您使用sender_idrecipient_id作为外键,但在您的代码中,您有:foreign_key => 'sender':foreign_key => 'recipient' 。 您是否尝试将它们更改为:foreign_key => 'sender_id':foreign_key => 'recipient_id' ? 所以:

 class Message < ActiveRecord::Base has_one :sender, :class_name => User, :foreign_key => 'sender_id' has_one :recipient, :class_name => User, :foreign_key => 'recipient_id' end class User < ActiveRecord::Base belongs_to :sent_messages, :class_name => Message, # ...etc belongs_to :received_messages, :class_name => Message, # ...etc end