快速提问(我认为)。我有用户,我想让他们互相发送消息。我的问题是,我应该有一个用户表,一个消息表和一个用户到消息连接表,还是应该只在消息表中存储to_user_id和from_user_id。如果是后者,该协会会是什么样的呢?你甚至可以引用一个关联的“本地”密钥吗?
答案 0 :(得分:2)
您可以使用几个简单的has_many
关联来完成此操作。由于它是自我引用的,你需要覆盖一些Rails魔法才能使它工作。
class User < ActiveRecord::Base
has_many :sent_messages, :class_name => 'Message', :foreign_key => 'sender_id'
has_many :received_messages, :class_name => 'Message', :foreign_key => 'recipient_id'
end
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => 'User'
belongs_to :recipient, :class_name => 'User'
end
Rails没有更清晰的方式来做我所知道的自我引用关联。
答案 1 :(得分:0)
我认为后者听起来不错。这只是我的头脑,但我知道AR的协会有这样的选择......
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => :user, :foreign_key => :from_user_id
belongs_to :recipient, :class_name => :user, :foreign_key => :to_user_id
#...
end
class User < ActiveRecord::Base
has_many :received_messages, :class_name => :message, :foreign_key => :to_user_id
has_many :sent_messages, :class_name => :message, :foreign_key => :from_user_id
end