Выполните сумму с вложенными контроллерами - PullRequest
1 голос
/ 10 февраля 2010

У меня есть две модели концерна, «Заказ» и «Комплект»; каждый заказ has_one :kit

Каждый «комплект» имеет значение «стоимость». В контроллере я хочу иметь возможность суммировать затраты для каждого «заказа».

Логически я думал, что это будет иметь смысл (но это не работает):

@revenue = Order.Kit.sum(:cost) 

Любая помощь будет оценена. Спасибо.


Пример:

Пользователь создает новый заказ для комплекта, стоимость которого составляет 20. Мне бы хотелось, чтобы значение @revenue было таким образом равным 20 (что отражает продажи). Когда кто-то еще создает новый заказ для того же набора, @revenue должен измениться на 40.

Ответы [ 3 ]

1 голос
/ 10 февраля 2010
kit_costs = order.kits.map { |k| k.cost }
@revenue = kit_costs.inject(0) { |sum, n| sum += n }
1 голос
/ 10 февраля 2010

Если у вас нет двух комплектов на заказ ...

@revenue = Kit.sum(:cost, :conditions => 'order_id is not null')

замена order_id на ваш Foreign_key

0 голосов
/ 10 февраля 2010

Полагаю, у вас это задом наперед, и у каждого заказа есть kit_id.

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

kit = Kit.find(kit_id)
number_of_orders = Order.count(:all,:conditions=>['kit_id = ?',kit_id])
@revenue = kit.cost*number_of_orders
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...