У меня есть модель Партнера, у которой есть_and_belongs_to_many Проекты, в то время как у каждого Проекта есть_ Сайты.Я хочу получить все сайты для данного партнера (и на данный момент меня не интересуют проекты между ними).
Я выполнил то, что мне нужно, с помощью named_scope в модели сайта и проекта.sites.Метод экземпляра, который оборачивает вызов сайта с именем scope, следующим образом:
class Partner < ActiveRecord::Base
has_and_belongs_to_many :projects
def sites
Site.for_partner_id(self.id)
end
end
class Project < ActiveRecord::Base
has_many :sites
end
class Site < ActiveRecord::Base
belongs_to :project
named_scope :for_partner_id, lambda {|partner_id|
{ :include=>{:project=>:partners},
:conditions=>"partners.id = #{partner_id}"
}
}
end
Теперь, учитывая экземпляр партнера, я могу вызвать partner.sites и получить обратно коллекциювсе сайты, связанные с партнером.Это именно то поведение, которое я хочу, но мне интересно, есть ли другой способ сделать это, используя только ассоциации activerecord, без названной области видимости?