来自《使用 Rails 进行敏捷 Web 开发》一书
class Order < ActiveRecord::Base
named_scope :last_n_days, lambda { |days| {:conditions =>
['updated < ?' , days] } }
named_scope :checks, :conditions => {:pay_type => :check}
end
该声明
orders = Orders.checks.last_n_days(7)
将导致仅对数据库进行一次查询。
Rails 如何实现这一点?我是 Ruby 的新手,我想知道是否有一个特殊的结构允许这种情况发生。
为了能够像这样链接方法,由 named_scope 生成的函数必须返回它们自己或一个对象,而不是可以进一步限定范围。但是 Ruby 怎么知道这是最后一个函数调用并且它现在应该查询数据库呢?
我问这个是因为上面的语句实际上是查询数据库,而不仅仅是返回由链接产生的 SQL 语句。