Dokładnie nie wiem, czy chodzi o SQL Caching, ale nic innego nie przychodzi mi do głowy. Liczę na pomoc.
Otóż mam index, w którym listuję items wg daty przydatności, mam więc wsteczne odliczanie, no i tu problem, otóż w momencie, gdy data przydatności się kończy, dany item nie znika z listy, dopiero restart serwera pomaga, więc musi to siedzieć w pamięci. Co zrobić, aby tego typu cache wyłączyć dla określonej listy.
konstrukcja scope
scope :the_end, where(“ended_at >= ?”, Time.now)
Używam ruby 1.8.2, rails 3.0.5, pg, thin
Z góry dzięki za jakąś podpowiedź lub rozwiązanie tego problemu.
[quote=qoobaa]scope :the_end, lambda { where("ended_at >= ?", Time.now) }
lub
def self.the_end
where("ended_at >= ?", Time.now)
end
To nie kwestia cache, a języka i tego kiedy te wyrażenia są ewaluowane przez interpreter.[/quote]
Dzięki serdeczne za wyjaśnienie.
[quote]Passing a proc (or other object that responds to #call) to scope is deprecated. If you need your
scope to be lazily evaluated, or takes parameters, please define it as a normal class method
instead. For example, change this:
class Post < ActiveRecord::Base
scope :unpublished, lambda { where('published_at > ?', Time.now) }
end
To this:
class Post < ActiveRecord::Base
def self.unpublished
where('published_at > ?', Time.now)
end
end[/quote]
Były problemy z default_scope i dlatego to chcieli wywalić. Teraz się znalazło lepsze rozwiązanie i między innymi dlatego przywrócili. I z tego co widziałem w komentarzach chodzi też o spójność:
[code]scope :assigned, where(‘assigned_id IS NOT NULL’)
scope :recent, -> { |limit| oder(‘created_at DESC’).limit(limit || 5) }
głupio byłoby wymuszać, żeby tą drugą linijkę zamienić na: