Ruby on Rails chamada implementação de escopo
Do livro Desenvolvimento Ágil na Web com Rails
class Order < ActiveRecord::Base
named_scope :last_n_days, lambda { |days| {:conditions =>
['updated < ?' , days] } }
named_scope :checks, :conditions => {:pay_type => :check}
end
A declaração
orders = Orders.checks.last_n_days(7)
resultará em apenas uma consulta no banco de dados.
Como os trilhos implementam isso? Eu sou novo no Ruby e estou pensando se há uma construção especial que permita que isso aconteça.
Para poder encadear métodos como esse, as funções geradas pelo named_scope devem estar retornando elas mesmas ou um objeto que possa ter um escopo adicional. Mas como Ruby sabe que é a última chamada de função e que deve consultar o banco de dados agora?
Eu pergunto isso porque a instrução acima realmente consulta o banco de dados e não apenas retorna uma instrução SQL resultante do encadeamento.