скажем, у меня есть модель, как это:сумма() или группа() виртуальные атрибуты в Ruby On Rails
class Surface < ActiveRecord::Base
attr_accessible :width, :length
def area
self.width * self.length
end
end
Где @surface.area
возвращает площадь поверхности. Теперь, скажем, у меня много поверхностей, называемых @surfaces
, и я хочу суммировать все области. Как мне это сделать?
Мой любимый решение будет выглядеть следующим образом:
@surfaces.sum(:area)
Но это не работает. Итак, как я могу позвонить .sum()
или .group()
или любые подобные функции на виртуальных атрибутах, подобных этому в rails? Я бы хотел избежать звонков .each do |surface|
.
Заранее спасибо.
Спасибо за ваш ответ! Ваше решение замечательно, но я все еще болен, если есть способ сделать виртуальный атрибут ': area' доступным как реальные атрибуты': width' или ': length'. Поэтому я могу делать '.sum (: area)' или '.group (: area)' так же, как я бы сделал это с помощью ': width'. 'width * height' был просто простым примером, он должен представлять любой расчет или даже более сложную функцию для общего назначения. – kernification
Извините, но ActiveRecord недостаточно умен, чтобы перевести произвольный код Ruby на SQL. –