ruby on rails llamado implementación de alcance
Del libro Desarrollo web ágil con rieles
class Order < ActiveRecord::Base
named_scope :last_n_days, lambda { |days| {:conditions =>
['updated < ?' , days] } }
named_scope :checks, :conditions => {:pay_type => :check}
end
La declaración
orders = Orders.checks.last_n_days(7)
resultará en una sola consulta a la base de datos.
¿Cómo implementa esto los rieles? Soy nuevo en Ruby y me pregunto si hay una construcción especial que permita que esto suceda.
Para poder encadenar métodos como ese, las funciones generadas por named_scope deben devolverse a sí mismas o a un objeto que se pueda ampliar aún más. Pero, ¿cómo sabe Ruby que es la última llamada a la función y que debería consultar la base de datos ahora?
Pregunto esto porque la declaración anterior realmente consulta la base de datos y no solo devuelve una declaración SQL que resulta del encadenamiento.