Ruby on Rails: как правильно определить метод в модели для суммирования столбца? - PullRequest
4 голосов
/ 26 августа 2010

Я пытаюсь суммировать все столбцы "сумма" с определением в модели, например:

  def self.total
    self.all.collect(&:amount).sum
  end

При этом «Recipe.total» работает как положено. Тем не менее, я использую плагин, который передает «Recipe.find (: all)», и я не могу передать это методу, чтобы найти сумму. То есть:

Recipe.find(:all).total # doesn't work

Есть ли способ определить метод в моей модели по-другому, чтобы Recipe.find (: all) .total работал как Recipe.total?

Ответы [ 2 ]

5 голосов
/ 26 августа 2010

Вы можете написать свой метод как:

def self.total
  self.sum(:amount)
end

И затем вы можете использовать его также с именованными областями:

Recipe.total # without any scopes
Recipe.my_custom_named_scope.total # with your custom named scope

Другой вариант - переопределить метод поиска для этой модели:

def self.find(*args)
  result = super
  if args[0] && args[0] == :all
    def result.total
      self.sum(&:amount)
    end
  end
  result
end

Тогда вы получите именно то, что хотите, вы сможете написать Recipe.find(:all).total.

3 голосов
/ 26 августа 2010

Проверьте Модуль вычислений

У него есть методы для: суммы, среднего, числа и т. Д.1008 * Итак, вы хотели бы написать:

Recipe.sum(:total)

Веселитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...