Task.find Условия - PullRequest
       27

Task.find Условия

0 голосов
/ 10 сентября 2010

Я создаю свой первый проект Rails - это приложение ToDo, которое должно отправлять предупреждения, когда Задача проходит через X минут после ее окончания.

Я пытаюсь создать переменную с задачами, которыеX минут от его крайнего срока.X минут различны для каждой задачи - это означает, что она хранится в базе данных.Итак, я получил два столбца в базе данных.

1: Task.close_time => Столбец времени с фактическим крайним сроком выполнения задачи.

2: Task.close_time_warning => Целочисленный столбец счерез сколько минут предупреждение должно быть отправлено до наступления смертельного исхода.

Затем у меня есть следующий код, но я получаю ошибки при попытке загрузить RSS-канал с предупреждениями.

def warnings

@warnings = Task.find(:all, :conditions => ["completed_at = ? and state_active = ? and close_time < ?", nil, true, Date.new(2000, 1, 1).to_datetime + Time.now.seconds_since_midnight.seconds + task.close_time_warning.minutes])

respond_to do |format|
  format.rss
end

end

1 Ответ

0 голосов
/ 10 сентября 2010

Вам, вероятно, понадобится использовать функцию базы данных, чтобы вычесть время.В mysql это, например, date_sub .

Однако может быть эффективнее сохранить производное поле notify_time, для которого вы указали правильное время уведомления.Это сделает ваш запрос о задачах для уведомления более эффективным.Вы можете установить это значение с помощью обратного вызова, что-то вроде:

class Task < ActiveRecord::Base
  def before_save
    if close_time && close_time_warning
      notify_time = close_time - close_time_warning.minutes
    end
  end
end

Тогда ваш тест для задач для уведомления будет:

@warnings = Task.find(:all, 
    :conditions => ['completed_at is not null and notify_time > ?', Time.now]
...