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_id
和recipient_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