2013-07-17 1 views
0

У меня есть приложение Rails 3, размещенное на Heroku, работающее с базой данных Postgres. У меня есть действие контроллера, которое должно генерировать RSS-канал, но я нахожу, что он никогда не обновляется до тех пор, пока приложение не перезагрузится (либо потому, что я делаю новый выпуск в Heroku, либо потому, что сайт неактивен какое-то время, вращается и снова возвращается). Он возвращает «устаревшие» данные, которые исключают новые элементы.scope on Date.current только обновления при перезапуске Rails

Область определяется как так, на основе сравнения ряд на моей модели называется date и Date.current:

действие
class Petition < ActiveRecord::Base 
    scope :current, where(["petitions.date <= ?", Date.current]).order("petitions.date DESC") 
    scope :published, { :conditions => { :published => true } } 
end 

Контроллер выглядит так:

class PetitionsController < ActionController::Base 

    before_filter :find_diary 

    def rss 
    current_petitions.each do |petition| 
     puts petition.date 
    end     
    end 

    protected 

    def find_diary 
    @diary = Diary.find(params[:id]) 
    end  

    def current_petitions 
    @diary.petitions.published.current.limit(25) 
    end 
end 

Как вы можете см., предполагается, что все петиции возвращаются с date, который является сегодня или ранее. Он отлично работает на консоли Heroku: Diary.find(15).petitions.published.current.limit(25).first всегда дает мне один на сегодня. Из журналов видно, что он вызывает функцию current_petitions при каждом запросе канала. Но если я покину сайт в течение 24 часов, то он пока только покажет мне петиции до вчерашнего дня. Если я сделаю выпуск, чтобы добавить код отладки, он снова начнет работать.

ответ

2

Когда вы устанавливаете область с временем в ней, вам нужно использовать выражение лямбда, чтобы гарантировать, что вызов времени оценивается каждый раз, когда область используется. Есть более подробная информация в rails guide, но ваша сфера должна больше походить на:

scope :current, lambda { where(["petitions.date <= ?", Date.current]) } 
+0

Легко, когда вы знаете, как! – andygeers

Смежные вопросы