Rieles: filtrar usando el modelo de uni贸n en has_many hasta

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