2

我真的傻眼了。我有一个 Rails 应用程序,它将博客文章存储在 Article 模型中。索引页面调用模型上的范围并返回最新文章。但是,当我加载页面时,只显示了一些文章,但是当我将代码复制到 Heroku 控制台时,丢失的文章会显示在结果中。

这是索引操作:

def index
    @articles = Article.featured_published_articles.order("date_time DESC").page(params[:page])
end

这是范围:

scope :featured_published_articles , where("featured = ? AND status IN (?) AND date_time <= ?", true , ['published','published-pending'], DateTime.now)

当我从控制台调用该方法时,该方法可以正常工作,但是当我加载页面时,并非所有结果都显示出来。有任何想法吗?

4

1 回答 1

4

它不是 Heroku 特定的,但范围是在第一次解释时存储“DateTime.now”。基本上, DateTime.now 是当您推送到 heroku 时,而不是“现在”。

你想在这里使用 lambda

scope :featured_published_articles , -> {where("featured = ? AND status IN (?) AND date_time <= ?", true , ['published','published-pending'], DateTime.now) }

在 Rails4 中,这不是问题(它会给你一个加载错误),但在 Rails3 中它会加载并导致你看到的问题。

于 2013-06-21T20:23:25.740 回答