В приложении Rails 3.2 я определил два метода, которые выполняют вычисления и возвращают большое десятичное значение.
Def Func1
Model1.price * Model1.qty
End
Def Func2
Model2.price * Model2.qty
End
Не знаю, насколько это актуально, но поле: qty является счетчикомстолбец кэша, в котором записано количество связанных записей has_many.
Теперь я хочу вычислить сумму Func1 и Func2.Если я попытаюсь
Def FuncTotal
Func1 + Func2
End
, он возвращает объединенные два значения, а не сумму.то есть если Func1 = 15,45 и Func2 = 24,76, то FuncTotal = 15,4524,76.
Я также пытался
Def FuncTotal
Func1.to_s + Func2.to_s
End
Но это также объединяет.
Я предполагаю, что эта проблемапроисходит, потому что расчет основан на значениях BigDecimal.В этом случае мне кажется странным, что вычисление цены * qty возвращает правильный продукт.
Как я могу добавить два значения BigDecimal вместе?
Большое спасибо
РЕДАКТИРОВАТЬ
Это пример вывода на консоль
> 1=Model1.find(1)
=> #<Model1 id:1......
> 2.Model2.find(2)
=> #<Model2 id:2....
> 1total=1.func1
=> [#<BigDecimal:10a5cd888,'0.25E4',9(36)>]
> 2.total=2func2
=> [#<BigDecimal:10a5c7348,'0.5E3',9(36)>]
> 1+2
=> [#<BigDecimal:10a5cd888,'0.25E4',9(36)>, #<BigDecimal:10a5c7348,'0.5E3',9(36)>]
Странно!
РЕДАКТИРОВАТЬ
Мои столбцыопределяется следующим образом.
Цена одинакова в обеих моделях
t.decimal "price", :precision => 12, :scale => 2
Количество более или менее одинаково в обеих моделях
t.integer "model1_children_count", :default => 0
и в дочерней модели
belongs_to :model1, :counter_cache => true
РЕДАКТИРОВАТЬ
Полный список функций Func1 и Func2 приведен ниже, он находится внутри родительской модели, которая имеет_модели Model1s и Model2s.
Class Parent
def total_cost_of_model1
model1s.collect { |model1s| model1.price * model1.quantity }
end
end