2014-08-30 49 views
0

我有一个用户模式:Facebook喜欢请求模型。许多一对多同型号同

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,:通过,:来源,:class_name等

这似乎与大多数教程示例略有不同,因为用户可以属于双方关系(虽然不是在同一时间)。

任何有关如何使这项工作的建议。更重要的是如何思考这种关系?

fyi: 我的请求模型只有sender_id,recipient_id和accepted:boolean。

回答

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。但是如果你想重命名:请求类似于:sent_request,你需要指定类。

另请注意,默认情况下外键被猜测为带有“_id”后缀的关联名称。所以定义belongs_to:person关联的类将使用“person_id”作为默认值:foreign_key。如果您使用的名称不符合导轨命名约定,则需要指定foreign_key。

相关问题