Il where il metodo restituisce un ActiveRecord::Relation oggetto e di per sé questo oggetto non emette una query del database. È dove usi questo oggetto che conta. join anche il metodo lazy carica la query del database utilizzando la tabella associata, ma caricando solo la Home tabella in memoria come User associato la tabella non è richiesta. Successivamente hai merge , cosa merge il metodo fa è un modo semplice per utilizzare un ambito denominato su un modello unito. Qualcosa come
class Home < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
belongs_to :home
scope :available, ->{ where(available: true) }
end