0

私は Rails を初めて使用し、has_many :through関係に条件を設定することについて質問があります。私はモデルの:joined_groups関係を持ちたいです。FacebookUserJoined_groups は、 の条件を満たす GroupInvite テーブルを経由しますwhere(accepted: true)。ただし、Rails でこれを実現する方法や、これが正しい方法であるかどうかはわかりません。私は次のモデルを持っています...

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

ファイスブックユーザー

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

どんな助けでも大歓迎です!

4

1 に答える 1

0

これを試すことができますか:

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

マッタ

于 2013-06-04T05:57:49.767 に答える