我有两个类Message和User。消息具有sender_id和recipient_id两个用户的外键。如何构建关系,我将能够为发件人和收件人获取用户,例如@ message.sender.name和@ message.recipient.name
我试着这样做:
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => 'User', :foreign_key => 'sender'
belongs_to :recipient, :class_name => 'User', :foreign_key => 'recipient'
end
class User < ActiveRecord::Base
has_many :recivied_messages, :class_name => 'Message', :foreign_key => 'recipient'
has_many :send_messages, :class_name => 'Message', :foreign_key => 'sender'
end
但它没有帮助,当我试图访问时,例如@ message.recipient.name,它说“未定义的方法`名称'”
答案 0 :(得分:2)
您可以使用: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