2014-08-30 81 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。