gpt4 book ai didi

ruby-on-rails - 命名范围不与时区合作?

转载 作者:行者123 更新时间:2023-12-04 07:31:34 26 4
gpt4 key购买 nike

我遇到了一个非常棘手的问题。这是我的模型:

class Entry < ActiveRecord::Base
default_scope :order => 'published_at DESC'
named_scope :published, :conditions => ["published_at < ?", Time.zone.now], :order => 'published_at DESC'
belongs_to :blog
end

现在如果我这样做

@entries = Entry.published.paginate_by_blog_id @blog.id,
:page => params[:page],
:order => 'published_at DESC',

除非我将 published_at 后移一小时,否则它不会返回帖子。但是:

@entries = Entry.paginate_by_blog_id @blog.id,
:page => params[:page],
:conditions => ["published_at < ?", Time.zone.now],
:order => 'published_at DESC',

而且效果很好!

我要疯了,有人知道从哪里开始调试吗?

最佳答案

命名范围不是动态运行的,所以 Time.zone.now 是类加载时的值。如果您希望命名范围在每次调用时使用不同的值,则条件需要是 lambda 的结果。

看看http://railscasts.com/episodes/108-named-scopehttp://ryandaigle.com/articles/2008/3/24/what-s-new-in-edge-rails-has-finder-functionality

例如:

named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }

这样每次调用范围时都会计算 1.week.ago。

关于ruby-on-rails - 命名范围不与时区合作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com