繁体   English   中英

这会在rails中使用named_scope吗?

[英]Will this work with named_scope in rails?

我无法在任何地方找到答案,而且我今天没有留下脑力来想办法自己确认一下。

我有这样的命名范围......

named_scope :fresh, :conditions => ['updated_at > ?', 4.hours.ago]

我不知道这是否会按照我想要的方式运作。 我的一部分认为4.hours.ago将在加载类文件时解析,而另一部分认为4.hours.ago将在使用时展开。

谢谢您的帮助!

你需要使用lambda:

named_scope :fresh, lambda { { :conditions => ['updated_at > ?', 4.hours.ago] } }

您需要使用lambda的原因是因为应用程序启动时会加载范围。 因此,范围中的时间将反映范围的加载时间。 所以它似乎可行,但随着时间的推移会变得越来越不正确。 通过插入lambda,您可以告诉每次调用范围时都会执行条件哈希处理。 因此,时间呼叫不会过时。

class Person < ActiveRecord::Base
  named_scope :stale, :conditions => ['updated_at > ?', 4.hours.ago]
  named_scope :fresh, lambda {{ :conditions => ['updated_at > ?', 4.hours.ago] }}
end

生产:

> Person.stale
  SELECT * FROM "people" WHERE (updated_at > '2011-03-01 20:57:40') 
> Person.stale
  SELECT * FROM "people" WHERE (updated_at > '2011-03-01 20:57:40') # no change
> Person.fresh
  SELECT * FROM "people" WHERE (updated_at > '2011-03-01 20:57:59') 
> Person.fresh
  SELECT * FROM "people" WHERE (updated_at > '2011-03-01 20:58:01') 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM