Dynamiczne has_and_belongs_to_many

Witam
Mam taką strukture

[code=ruby]class User
has_and_belongs_to_many :chains
has_and_belongs_to_many :outlets
end

class Outlet < ActiveRecord::Base
belongs_to :chain
has_and_belongs_to_many :users
has_and_belongs_to_many :outlet_managers, :class_name => ‘User’, :conditions => {:role => ‘outlet_manager’}
end

class Chain < ActiveRecord::Base
has_and_belongs_to_many :users
has_and_belongs_to_many :chain_managers, :class_name => ‘User’, :conditions => {:role => ‘chain_manager’}
has_many :outlets
end[/code]
Dla chain_manager.outlets chciałbym uzyskać wszystkie outlety które są w danej sieci. Aktualnie to nie działa poprawnie ponieważ generuje zapytanie

Czy macie jakiś ciekawszy pomysł niż nadpisanie :finder_sql w zależności od aktualnego role ?

Nie lubię (po paru eksperymentach) korzystać z conditions w relacjach.
Ja bym to po prostu rozbił na scope’y.

Chodzi Ci o model Chain, tak?

Z grubsza to chciałbym żeby user.outlets zwracało mi outlety niezależnie jaką role ma user. Ale jeśli jest chain menagerem to tutaj one są pobierane inaczej niz zwykle, podobnie może być dla jakiejś innej roli.

[code=ruby]class Outlet < ActiveRecord::Base
belongs_to :chain
has_and_belongs_to_many :users

has_and_belongs_to_many :outlet_managers, :class_name => ‘User’, :conditions => {:role => ‘outlet_manager’}

scope :only_outlet_managers, joins(:users).where(:users => {:role => “outlet_manager”})
end

IRB

Outlet.only_outlet_managers[/code]
Coś takiego?

Nie, chodzi mi o to zeby user.outlets zwróciło mi wszystkie outlety do których user jest przypisany a niekoniecznie ma role ‘chain_manager’. Najlepiej bez grzebania z finder_sql