I have one really annoying problem - I hope you can give me some
advice…
I have a model “Article”. Article has among other fields
created_at, published_at and publish_date field.
I want the list of “published” articles if the publish_date is <= then
current time/date.
Maybe you forgot to use a block in your scope (in that case the Time.now
is
evaluated only 1 time in production, at the moment the class is loaded,
not
at
the time the scope is called). ?
Note that scopes defined with scope will be evaluated when they are
defined,
rather than when they are used. For example, the following would be
incorrect:
class Post < ActiveRecord::Base
scope :recent, where(‘published_at >= ?’, Time.now - 1.week)
end
The example above would be frozen to the Time.now value when the Post
class was defined, and so the resultant SQL query would always be the
same.
The correct way to do this would be via a lambda, which will re-evaluate
the
scope each time it is called:
class Post < ActiveRecord::Base
scope :recent, lambda { where(‘published_at >= ?’, Time.now - 1.week)
}
end
HTH,
Peter
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.