我有一个用户模型:
class User < ActiveRecord::Base
has_many :sent_requests, :foreign_key => :sender_id, :class_name => "Request"
has_many :recieved_requests, :foreign_key => :recipient_id, :class_name => "Request"
和请求模型:
class Request < ActiveRecord::Base
belongs_to :sender, class_name: "User", :source => "sender_id"
belongs_to :recipient, class_name: "User", :source => "recipient_id"
我正在努力理解以下方面的区别:foreign_key,:through,:source,:class_name等。
这似乎与大多数教程示例略有不同,因为用户可以属于双方的关系(尽管不是同时)。
有关如何使其正常工作的任何建议。更重要的是如何思考这种关系?
供参考: 我的Request模型只有sender_id,recipient_id和accepted:boolean。
答案 0 :(得分:0)
以下是我正在使用的内容:
在用户的模型中:
has_many :sent_requests,
:class_name => "Request",
:foreign_key => "sender_id"
has_many :received_requests,
:class_name => "Request",
:foreign_key => "receiver_id"
在请求的模型中:
belongs_to :sender,
:class_name => "User"
belongs_to :receiver,
:class_name => "User"
请注意,我们用户:class_name指定类的名称,当rails无法推断出类的名称时。如果你说: has_many:请求 那么你不需要包含类名。 Rails会自动知道它是Request。但是如果你想重命名:request to like like:sent_request,你需要指定类。
另请注意,默认情况下,外键是带有“_id”后缀的关联名称。因此,定义belongs_to:person关联的类将使用“person_id”作为默认值:foreign_key。如果使用的名称不符合rails命名约定,则需要指定foreign_key。