El where método devuelve un ActiveRecord::Relation objeto, y por sí mismo este objeto no emite una consulta de base de datos. Lo que importa es dónde usas este objeto. join El método también carga de forma diferida la consulta de la base de datos utilizando la tabla asociada, pero solo carga el Home tabla en la memoria como el User asociado no se requiere mesa. Luego tienes merge , qué merge El método es una forma simple de usar un alcance con nombre en un modelo unido. Algo como
class Home < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
belongs_to :home
scope :available, ->{ where(available: true) }
end