以下范围定义包含两个错误,导致它无法按预期工作。你能找到他们吗?
named_scope :articles_to_display,
:conditions => ["articles.publish_at < (?)", Time.now]
(列publish_at包含时间/日期,应该发布文章)。这些错误是根本性的,而不只是一个错别字。
我会接受第一个正确答案或在几天内发布解决方案。
答案 0 :(得分:4)
第一个问题是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]
}
答案 1 :(得分:2)
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
答案 2 :(得分:2)
作为补充参考,转换为rails 3的已接受答案是:
scope :articles_to_display, lambda {
where("articles.publish_at < (?)", Time.zone.now)
}
答案 3 :(得分:0)
named_scope :articles_to_display,
:conditions => ["articles.publish_at IS NOT NULL AND articles.publish_at <= (?)", Time.now]