запрос для отдельных месяцев в ActiveRecord - PullRequest
1 голос
/ 11 августа 2011

У меня есть поле с датами типа "2011-06-30" в базе данных моего приложения rails.Даты могут быть в диапазоне нескольких месяцев.Я хотел бы знать, как сделать запрос с использованием AR, чтобы найти отдельные месяцы в моей базе данных.

Результаты, которые я хочу получить, примерно такие:

[January, February, April, June]

Ответы [ 2 ]

4 голосов
/ 11 августа 2011

не уверен, что есть чистый AR способ сделать это.

с Postgre, вы можете сделать это так:

Model.select("distinct date_part('month',your_date_field) as my_months").all

это вернет массив, подобный [1,3,10].

Затем вы можете отобразить значения вашего массива, используя Date::MONTHNAMES[your month], чтобы иметь полное имя вместо числа.

ОБНОВЛЕНИЕ - Основано на комментарии Кейли и, возможно, более независимом от БД

Yourmodel.select('distinct date_field').all.collect{|x| x[:date_field].month}.uniq

даст

[1, 5, 6, 7, 8, 11, 12, 2, 3, 4, 9, 10] 

Если ваши данные охватывают более 1 года, это означает, что вы будете перебирать максимум 365 элементов. (366 в плохие годы). Так что, возможно, результативность работы приемлема. Я пытался запустить это

(Date.new(2011,1,1)..Date.new(2011,12,31)).collect{|x| x.month}.uniq

И результат приходит мгновенно

2 голосов
/ 12 августа 2011

Спасибо @Pierre, но вот как я это сделал:

MyModel.all.map { |d| d.my_date_field.strftime('%b %y') }.uniq
# ["Jun 11", "Jul 11", "Aug 11"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...