Модели Rails: как правильно обращаться с постоянными времени? - PullRequest
1 голос
/ 14 октября 2010

Я знаю, что следующий код модели неверен: поскольку модели загружаются только при загрузке сервера, временные «константы» также загружаются только в это время.

class Article < ActiveRecord::Base

  def expiring?
    if (self.enddate - Time.now) <= 1.day
      true
    else
      false
    end
  end

end

Что мне нужно исправить, чтобы значения времени оценивались каждый раз, когда «истекает»? называется ?

Спасибо за вашу помощь!

Tom

Ответы [ 3 ]

2 голосов
/ 14 октября 2010

Модели загружаются при загрузке сервера, но методы вызываются при их вызове.Если вы говорите о 1.day, то 1.day никогда не изменится (если только они не изменят количество секунд в дне), поэтому вам не нужно беспокоиться о том, что он будет «загружен» только один раз.

1 голос
/ 14 октября 2010

Если я что-то упустил, я не вижу ничего плохого в приведенном вами коде. Time.now будет оцениваться каждый раз, когда истекает? называется. Я бы, вероятно, сократил до:

def expiring?
  self.enddate >= 1.day.from_now
end

Для именованной области вам нужно поместить ее в лямбду, чтобы она каждый раз оценивалась (это звучит как вопрос, который вы фактически задаете):

named_scope :expiring, lambda { {:conditions => ["enddate >= ?", 1.day.from_now ] } } 
0 голосов
/ 14 октября 2010
if (self.enddate <= Date.today)

Может ли это быть решением?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...