#ruby-on-rails-3
#ruby-on-rails-3
Вопрос:
У меня есть модель, которая собирает финансовые данные от моих клиентов каждый календарный квартал каждого года (так: квартал 1, 2, 3 и 4 для любого заданного года). Для простоты модель называется Quarter и имеет атрибуты :client_id , :quarter , :year и :amount . Я хочу иметь возможность запрашивать и отображать последние четыре записи для атрибута:amount на основе квартала, который отображается в данный момент.
Так, например, если я смотрю на: квартал 3 за: 2011 год, то я хочу показать: сумму за текущий квартал (что легко), а также: сумму за: квартал 2 и 1 за: 2011 год и: квартал 4 за: 2010 год. Имеет ли это смысл?
Я выполнил эту работу, присвоив каждой записи, которую я хочу получить, другую переменную, а затем используя операторы elsif, чтобы найти ее, но я знаю, что должен быть более чистый способ сделать это.
Как мне это сделать?
Ответ №1:
Для извлечения последних N записей :
Quarter.last(n).reverse
Ответ №2:
с помощью интерфейса запросов Rails 2.x ответ:
Quarter.find(:all, :order => :year, :limit => 4).reverse
с помощью интерфейса запросов Rails 3.x ответ:
Quarter.order(:by => :year).limit(4).reverse
кстати. Я думаю, вам не следует хранить свои данные в модели с именем «Quarter», а скорее в модели с именем «FinancialData», и у этой модели есть атрибут «quarter», который будет содержать 2011/1, 2011/2 или иметь два атрибута: year и:quarter, которые необходимо индексировать вместе
Смотрите также:
Комментарии:
1. Классный человек, спасибо. Извините, я действительно новичок в этом, как тогда я мог бы поместить это в свое представление, чтобы показать только записи для атрибута:amount ?
2. проверьте этот веб-сайт: railscasts.com — в нем есть действительно полезные эпизоды — некоторые на начальном уровне, некоторые на продвинутом. Возможно, найдите там «Просмотр».
3. Еще раз спасибо, Тило. То, что я сделал, это просто присвоил переменную этому запросу в моем контроллере, что-то вроде: @lastfouritems = query, затем отобразил эту переменную в моем представлении. Однако он показывает все атрибуты для моей модели в огромном списке, а не только атрибут:amount . Как мне изолировать этот один атрибут и показывать только это?
4. @lastfouritems[i].сумма, где i = 0..3 , или вы можете использовать цикл each для прохождения по массиву. Если вы хотите иметь массив только с суммами, вы можете выполнить @lastfouritems.map(amp;:amount)
5. Спасибо, я попробую, но пока я на 90% продвинулся.
Ответ №3:
User.all.order("id desc").limit(40)