Получить записи, где date.year == some_year в Rails - PullRequest
4 голосов
/ 21 июня 2011

У меня есть столбец даты в моей базе данных в приложении Rails 3.1, и я хочу иметь возможность получать записи, в которых год дат совпадает с конкретным годом. Я пытался where(:date.year == year), но, конечно, я получил NoMethodError: undefined method 'year' for :date:Symbol. Можно ли сделать этот тип запроса?

Ответы [ 4 ]

6 голосов
/ 21 июня 2011

Вы можете использовать область, чтобы построить что-то вроде:

scope :for_year, lambda {|date| where("date >= ? and date <= ?", "#{date.year}0101", "#{date.year}1231")}
3 голосов
/ 30 марта 2013

в вашей модели:

scope :by_year, lambda { |year| where('extract(year from created_at) = ?', year) }

В вашем контроллере:

@courses = Course.by_year(params[:year])
1 голос
/ 21 июня 2011

Джесси дал вам, как мне кажется, идею для реального решения, но объяснить, почему это не удалось - это потому, что он попытался оценить «.year» как метод для символа, который вы передали: «: date».

Слово: дата - это просто параметр, указывающий «где», какое значение он позже будет использовать для построения запроса SQL для передачи в БД.Это не превращается в фактическую дату записи.Но значение ".year" будет оцениваться при передаче его в качестве параметра, прежде чем что-либо будет сделано с символом ": date".

0 голосов
/ 21 июня 2011

Предполагая, что ваш формат даты: YYYY-MM-DD HH:MM:SS

Попробуйте:

where(Date.strptime(:date, "%Y-%m-%d %H:%M:%S").year == year)

ИЛИ

where(["YEAR(?) = ?", :date, year])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...