Как использовать .find за последние пять дней в ruby ​​на рельсах? - PullRequest
1 голос
/ 07 мая 2010

Имейте модель с именем contact_email.date_sent

Я хочу иметь возможность запустить отчет, который отображает все те, где диапазон date_sent находится между date.today и date.today 5 дней назад.

Я предполагаю, что использую что-то вроде

@send_emails = Contact_Email.find(:conditions=> ???)

Но не ясно, что именно является лучшим способом. Спасибо!

Ответы [ 3 ]

1 голос
/ 07 мая 2010

Попробуйте это:

ContactEmail.all(:conditions => ["date_sent >= ?", 5.days.ago.to_date])

Этот подход быстрее, чем использование предложения BETWEEN (при условии индексации date_sent)

Предостережение:

Значение столбца date_sent должно быть меньше текущей даты.

Редактировать 1

Чтобы добавить индекс в миграцию:

add_index :contact_emails, :date_sent
1 голос
/ 07 мая 2010

ContactEmail.find(:conditions => ['date_sent BETWEEN ? AND ?', Date.today, 5.day.ago.to_date])

0 голосов
/ 07 мая 2010

Если это то, что вы будете использовать регулярно, почему бы не поместить named_scope в модель:

named_scope :recent, lambda { |*args| {:conditions => ["date_sent > ?", (args.first || 5.days.ago)]} }

который позволит вам написать:

ContactEmail.recent

за последние 5 дней или используйте аргумент arg, чтобы указать свои временные рамки, например, последние две недели:

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