Агрегатная функция ActiveRecord: существует ли независимая от базы данных «EXTRACT (WEEK from date)»? - PullRequest
0 голосов
/ 30 июня 2011

У меня есть метод, который прекрасно работает (с Rails 3 и PostgreSQL); мне просто интересно, возможно ли сделать это независимым от базы данных:

FarmGatePrice.average :price, :group => 'EXTRACT(WEEK FROM date)'

Насколько я понимаю, методы извлечения недельного номера ISO из даты всегда зависят от базы данных.

Я мог бы использовать что-то вроде виртуального атрибута: неделю, как видно здесь , но, похоже, параметры: group принимает только сырой SQL. Я также видел это решение , но оно не соответствует моим потребностям. Другой способ - использовать представление базы данных или даже добавить столбец: week, заполненный методом обратного вызова, но я бы предпочел не связываться со своей схемой.

Итак, какая-нибудь подсказка?

1 Ответ

1 голос
/ 30 июня 2011

Нет - если вам нужно создать группу по неделям, лучше сохранить ее непосредственно в базе данных в виде дополнительного столбца, установленного с помощью обратного вызова before_save.

Как вы говорите, извлечениеНеделя с даты нетривиальна, и поэтому лучше, чтобы Rails обрабатывал это, а не вашу базу данных.Это также улучшит производительность.

Обновление:

Пример обратного вызова:

def Thing

  before_save :set week

  private
     def set_week
        self.week = self.date.cweek
     end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...