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] } }