表面が非常にシンプルなもので、壁に頭をぶつけてきました。次の簡略化されたモデルがあるとしましょう。
user.rb
has_many :memberships
has_many :groups, :through => :memberships
membership.rb
belongs_to :group
belongs_to :user
STATUS_CODES = {:admin => 1, :member => 2, :invited => 3}
named_scope :active, :conditions => {:status => [[STATUS_CODES[:admin], STATUS_CODES[:member]]}
group.rb
has_many :memberships
has_many :users, :through => :memberships
簡単ですよね?したがって、私がやりたいのは、結合モデルの既存の名前付きスコープを使用して、ユーザーがアクティブになっているすべてのグループのコレクションを取得することです。User.find(1).groups.activeに沿った何か。明らかに、これは機能しません。
User.find(1).membrships.active.all(:include => :group)
しかし、現状では、メンバーシップとグループのコレクションを返すようなことをする必要があります。私はそれを望んでいません。
Membershipモデルの:active named_scopeを複製する条件で、Userモデルに別のhas_manyを追加できることは知っていますが、それはひどいことです。
has_many :active_groups, :through => :memberships, :source => :group, :conditions => ...
だから私の質問:モデル間を直接トラバースするときに中間の名前付きスコープを使用する方法はありますか?どうもありがとう。