2011-06-01 116 views
3

我有以下型號兩列:Ruby on Rails的的has_many:通過協會,與同型號

class UserShareTag < ActiveRecord::Base 
    attr_protected :sharee_id, :post_id, :sharer_id 

    belongs_to :sharer, :class_name => "User" 
    belongs_to :post 
    belongs_to :sharee, :class_name => "User" 

    validates :sharer_id, :presence => true 
    validates :sharee_id, :presence => true 
    validates :post_id, :presence => true 
end 

在後的模式,我有以下行:

has_many :user_share_tags, :dependent => :destroy 
has_many :user_sharers, :through => :user_share_tags, :uniq => true, :class_name => "User" 
has_many :user_sharees, :through => :user_share_tags, :uniq => true, :class_name => "User" 

怎麼辦我表示:user_sharers應該對應於:sharer_id?和:user_sharees應該對應於:sharee_id?由於它們都是相同的用戶模型,我不確定要做什麼。

有點相關的問題 - 在用戶模式,我有:

has_many :user_share_tags, :dependent => :destroy 
has_many :user_shared_posts, :through => :user_share_tags, :uniq => true, :class_name => "Post" 
has_many :recommended_posts, :through => :user_share_tags, :uniq => true, :class_name => "Post" 

如何納入了額外的邏輯:user_shared_posts應包含的職位,其中:sharer_id是USER_ID?和:recommended_posts應該包含:sharee_id是user_id的帖子?

在此先感謝!

回答

3

你只需要一個:source參數添加到您的has_many協會(你不需要:class_name選項):

has_many :user_sharers, :through => :user_share_tags, :source => :sharer, :uniq => true, :class_name => "User" 
has_many :user_sharers, :through => :user_share_tags, :source => :sharee, :uniq => true, :class_name => "User" 

然後在你的User模型,需要一個額外的has_many協會:

has_many :user_share_tags_as_sharee, :class_name => "UserShareTag", :foreign_key => :sharee_id, :dependent => :destroy 
has_many :user_share_tags_as_sharer, :class_name => "UserShareTag", :foreign_key => :sharer_id, :dependent => :destroy 
has_many :user_shared_posts, :source => :post, :through => :user_share_tags_as_sharer, :uniq => true 
has_many :recommended_posts, :source => :post, :through => :user_share_tags_as_sharee, :uniq => true 
+0

source參數做了什麼? – mfq 2012-11-20 13:39:26