【发布时间】:2010-04-09 13:14:58
【问题描述】:
来自《使用 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 语句。
【问题讨论】:
标签: ruby-on-rails ruby named-scope