Ответ 1
Вы хотите Date.today, а не date.today. Нет ничего плохого в том, что вы делаете, вы просто не ссылаетесь на класс даты правильно
Кроме того, это было бы Date.today.next_month.beginning_of_month
Я пытаюсь найти лучший способ запросить диапазон дат от рельсов... Я посмотрел на Google, но не уверен, как использовать этот синтаксис.
У меня есть модель, которая имеет различные события, и мне нравится добавлять в мое условие поиска оговорку, которая должна показывать только события, где поле: st_date сегодня или позже, по сути, показывают только текущие данные, ничего не произошло до сегодня.
У меня возникла проблема, потому что у меня нет даты окончания, чтобы остановить запрос, я хочу запросить все с сегодняшнего дня до следующего месяца.
Я думал что-то вроде
@events = Event.find(:all, :conditions => ["start_date between ? and ?",
date.Today, date.next_month.beginning_of_month])
но я получаю ошибку undefined локальную переменную или метод `date '......
Нужно ли мне что-то особенное использовать для класса Date? Или что-то не так с моим синтаксисом запроса? Я бы очень признателен за любую помощь.
Вы хотите Date.today, а не date.today. Нет ничего плохого в том, что вы делаете, вы просто не ссылаетесь на класс даты правильно
Кроме того, это было бы Date.today.next_month.beginning_of_month
Я бы сделал еще один шаг и определил область в вашей модели для повторного использования.
# rails 3 example:
# app/models/event.rb
scope :upcoming, lambda {
where("start_date between ? and ?", Date.today, Date.today.next_month.beginning_of_month)
}
# app/controllers/some_controller.rb
@events = Event.upcoming
В Rails 3 также есть отличный эпизод Railscasts:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3
Event.where(:start_date => Date.today..Date.today.next_month.beginning_of_month)
также отлично работает.
Взгляните на мой by_star плагин, который позволяет вам делать такие вещи, как:
Event.by_month(Time.now, :field => "start_date")