Ruby on rails 命名作用域不与时区合作?

Ruby on rails 命名作用域不与时区合作?,ruby-on-rails,timezone,named-scope,Ruby On Rails,Timezone,Named Scope,我遇到了一个非常棘手的问题。这是我的模型: 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 它不

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

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.paginate_by_blog_id @blog.id,
        :page => params[:page],
        :conditions => ["published_at < ?", Time.zone.now], 
        :order => 'published_at DESC', 
@entries=Entry.paginate_by_blog_id@blog.id,
:page=>params[:page],
:conditions=>[“发布时间<?”,时区.now],
:order=>'published_at DESC',
而且效果很好


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

命名作用域不是动态运行的,因此Time.zone.now是类加载时的值。如果希望命名范围在每次调用中使用不同的值,则条件必须是lambda的结果

看一看

例如:

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

这样,每次调用作用域时都会计算1.week.ago。

谢谢,这就解决了问题。我马上就要读这个话题了!
named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }