Entonces, desea filtrar usando un alcance a trav茅s de una asociaci贸n (no solo para usar en has_many, 隆pero creo que este ejemplo realmente muestra c贸mo brilla #merge!).
Dados los siguientes modelos:
class Person
has_many :accounts
has_many :computers, through: :accounts
end
class Account
belongs_to :person
belongs_to :computer
scope :administrators, -> { where(role: 'administrator') }
end
class Computer
has_many :accounts
has_many :people, through: :accounts
end
El filtrado mediante un modelo de combinaci贸n en un has_many a trav茅s se puede lograr ingenuamente con lo siguiente. Supongamos que tenemos una instancia de persona y queremos encontrar todas las computadoras en las que son administradores.
person.accounts.administrators.map(&:computer) # ewww
隆Podemos hacer esto mejor usando ActiveRecord :: SpawnMethods # merge !
person.computers.merge(Account.administrators) # very nice!
Sintaxis m谩s limpia, consulta claner. Ganar ganar