以下作用域定义包含两个错误,导致它不能按预期工作。你能找到他们吗?Rails测验(找到作用域定义中的错误)
named_scope :articles_to_display,
:conditions => ["articles.publish_at < (?)", Time.now]
(列publish_at包含时间/日期,文章应该发布时)。这些错误是基本错误,不仅仅是错别字。
我会接受第一个正确的答案或在几天后发布解决方案。
以下作用域定义包含两个错误,导致它不能按预期工作。你能找到他们吗?Rails测验(找到作用域定义中的错误)
named_scope :articles_to_display,
:conditions => ["articles.publish_at < (?)", Time.now]
(列publish_at包含时间/日期,文章应该发布时)。这些错误是基本错误,不仅仅是错别字。
我会接受第一个正确的答案或在几天后发布解决方案。
第一个问题是,Time.now在评估(使用Ruby读取文件时)的类级别,并且在使用范围时(这是您最有可能预期的)不进行评估。在这种情况下,您需要将条件生成包装在lambda/proc中。
named_scope :articles_to_display, lambda {
:conditions => ["articles.publish_at < (?)", Time.now]
}
第二个问题是可能是您想使用Time.zone.now而不是Time.now尊重当前的请求,而不是系统时间在服务器上的本地化时间。
以下是你想要什么直到结束:
named_scope :articles_to_display, lambda {
:conditions => ["articles.publish_at < (?)", Time.zone.now]
}
我应该抓住拉姆达,因为我一直使用它们来获取动态参数。虽然我不知道Time.zone。我的主要项目是一个内部站点,都在一个时区内进行。 :P – DGM 2011-05-04 12:29:39
named_scope :articles_to_display,
:conditions => ["articles.publish_at IS NOT NULL AND articles.publish_at <= (?)", Time.now]
快速尝试,很好。但空值不是问题(它只是没有通过条件)。如果我们不关心第二精度,那么
named_scope :articles_to_display, :conditions => ["articles.publish_at < (?)", DateTime.now]
或者尝试PROC
named_scope :articles_to_display, proc{ :conditions => ["articles.publish_at < (?)", DateTime.now]}
这里曾是超人的照片,被删除:d
有关其他参考,公认的答案,转换成轨道3是:
scope :articles_to_display, lambda {
where("articles.publish_at < (?)", Time.zone.now)
}
假设轨道2.X? – DGM 2011-05-03 21:39:30
是的,Rails 2.x,我不熟悉Rails 3.x,但我敢打赌,至少有一个问题也适用于它们,更可能两者都适用。 – Michal 2011-05-03 21:47:09
所以你知道正确答案? OO。 – fl00r 2011-05-03 21:52:15