On Mon, Sep 26, 2011 at 4:18 PM, zver <[email protected]> wrote:

> Hi all!
>
> I have one really annoying problem - I hope you can give me some
> advice...
>
> 1) 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.
>
> 2) In my Article model I have following scope:
>
> https://github.com/otobrglez/sveze-jabolko/blob/master/app/models/article.rb#L26


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). ?

From


http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html

<quote>
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
</quote>

HTH,

Peter

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to