сумма activerecord возвращает строку? - PullRequest
4 голосов
/ 28 сентября 2010

Это кажется мне очень странным, сумма активной записи возвращает строку, а не число

basket_items.sum("price")

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

basket_items.sum("price").to_i

Ответы [ 3 ]

2 голосов
/ 01 февраля 2013

https://github.com/rails/rails/pull/7439

Была причина, по которой он возвратил строку - вызов to_d для Fixnum в Ruby 1.8 даст ошибку NoMethodError.Это больше не относится к Ruby 1.9, так что, вероятно, все в порядке.

2 голосов
/ 28 сентября 2010

По API (рельсы 2.3.9):

Значение возвращается с тем же типом данных столбца, 0, если нет строки

Может ли столбец price быть string или text?

0 голосов
/ 01 февраля 2013

Сумма ActiveRecord:

Разница:

1) basket_items.sum ("цена")

Он также будет суммировать нецелые числа и будет возвращать нецелочисленный тип.

2) basket_items.sum ("цена"). To_i

Это выше преобразуется в целое число.

# File activerecord/lib/active_record/relation/calculations.rb, line 92
def sum(*args)
  if block_given?
    self.to_a.sum(*args) {|*block_args| yield(*block_args)}
  else
    calculate(:sum, *args)
  end
end

Вычисляет сумму значений для данного столбца. Значение возвращается с тем же типом данных столбца, 0, если нет строки.

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum

Github:

https://github.com/rails/rails/blob/f8f4ac91203506c94d547ee0ef530bd60faf97ed/activerecord/lib/active_record/relation/calculations.rb#L92

Также смотрите, Расширенное использование sum () в Rails .

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