named_scope для date.today Rails 2.3.9 - PullRequest
       14

named_scope для date.today Rails 2.3.9

1 голос
/ 22 апреля 2011

Работаю с приложением 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 Ответ

3 голосов
/ 22 апреля 2011

Вы не видите желаемых ответов, потому что 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), или только тренировки, которые были созданы «сегодня»? Ваш пример работает для первого, пример выше - для последнего.

...