Перезвоните в Rails - PullRequest
       3

Перезвоните в Rails

1 голос
/ 18 февраля 2010

Я не могу найти очень хорошие вступления к определенным обратным вызовам в рельсах.

В основном я имею в виду две модели:

  1. Заказ
  2. Товар (вложенный в бланк заказа)

I 'Используя модель before_update для выполнения некоторой базовой математики:

 class Order < ActiveRecord::Base
        accepts_nested_attributes_for :line_items
        before_update :do_math
protected
def do_math
  self.req_total = self.line_items.sum(:total_price)
end

req_total - это общая стоимость заказа, когда пользователь обновляет суммы, которые мне нужны, чтобы сложить total_price для line_items.Что я делаю неправильно?Моя логика не в состоянии прочитать недавно отправленный total_price.

Спасибо!

Ответы [ 2 ]

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

Посмотри на свой журнал.Метод sum делает сумму SQL из базы данных.В этом случае он может не работать, поскольку члены дочерней модели (line_items), возможно, еще не сохранены в БД.

В качестве альтернативы попробуйте

self.req_total = 0
line_items.each{|item|self.req_total += item.total_price}   

ps.Метод суммирования для ассоциаций ActiveRecord - это не тот же метод суммирования, что и для перечислимых, регулярных массивов и т. Д. Метод суммирования ActiveRecord действительно является методом вычисления (: суммы).

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

Не уверен, что вы используете sum - похоже, вы пытаетесь использовать SQL, когда говорите на Ruby!

Попробуйте Как сложить массив чисел в Ruby?

Надеюсь, это поможет:)

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