named_scope для date.today Rails 2.3.9
Работаю с приложением Rails 2.3.9 и задаюсь вопросом, как написать свой named_scope так, чтобы я получал только workouts
с текущей даты. Я устанавливаю часовой пояс в контроллере приложения с before_filter. Ниже не выдает ошибку, просто не фильтрует:
workout.rb
named_scope :today_only, :conditions => [ "workouts.created_at <= ? AND workouts.created_at >= ?", Time.zone.now, 1.days.ago ]
application_controller.rb
before_filter :set_user_time_zone
1 ответ
Вы не видите желаемых ответов, потому что Ruby оценивает ваш вызов Time.now, когда он оценивает определение вашего класса, а не когда вы вызываете область. Вам нужно пройти lambda
на ваш named_scope
позвоните, чтобы получить оценку каждого запроса:
# ensure that Time.now is evaluated on every call
named_scope :today_only, lambda {{ :conditions => ["workouts.created_at BETWEEN ? AND ?", Time.zone.now.at_beginning_of_day, Time.zone.now.end_of_day ] }}
Кроме того, я думаю, что ваши временные границы могут быть неправильными. Вы ищете workouts
которые были созданы за последние 24 часа (относительно Time.now), или только тренировки, которые были созданы "сегодня?" Ваш пример работает для первого, пример выше - для второго.