2013-06-04 104 views
0

我是Rails的新手,並有條件關於has_many :through關係的問題。我想在FacebookUser模型中有一個:joined_groups關係。 joined_groups將通過GroupInvite表格滿足條件where(accepted: true)。不過,我不知道如何用Rails來完成這個任務,或者如果這是做到這一點的正確方法。我有以下型號...has_many通過範圍條件

Group.rb

class Group < ActiveRecord::Base 
    attr_accessible :description, :name 

    ... 

    #Relationships 
    has_many :group_invites, class_name: 'GroupInvite' 
    has_many :facebook_users, class_name: 'FacebookUser', :through => :group_invites, :source => :facebook_user 
end 

GroupInvite.rb

class GroupInvite < ActiveRecord::Base 
    attr_accessible :accepted, :facebook_user_uid, :group_id, :admin 

    ...  

    #Relationships 
    belongs_to :group 
    belongs_to :facebook_user, :foreign_key => :facebook_user_uid, :primary_key => :facebook_user_uid 

    #Scopes 
    scope :pending, where(accepted: nil) 
    scope :declined, where(accepted: false) 
    scope :joined, where(accepted: true) 
end 

FacebookUser

class FacebookUser < ActiveRecord::Base 

    #Attributes 
    attr_accessible :first_name, :gender, :last_name, :uid 

    ... 

    has_many :group_invites, class_name: 'GroupInvite', :primary_key => :uid, :foreign_key => :facebook_user_uid 
    has_many :groups, class_name: 'Group', :through => :group_invites, :source => :group 
    ... 
end 

任何幫助將不勝感激!

回答

0

你可以試試這個:

has_many :accepted_group_invites, class_name: 'GroupInvite', :primary_key => :uid, :foreign_key => :facebook_user_uid, :conditions => { :accepted => true } 

馬塔