Предположим запрос следующей формы
operatingExpenses = Expense.find(:all,
{:select=>"categories.activityType, categories.name heading, sum(amount) totalAmount",
:joins => "inner join expense_categories categories on category_id = categories.id ",
:group => "categories.activityType, categories.name",
:order => "categories.activityType, totalAmount DESC"}
)
Теперь сумма определяется как десятичное поле в схеме базы данных. например определение в Rails Migration будет
create_table :expenses do |table|
table.column :created_at, :timestamp, :null=>false
table.column :description, :string, :limit=>100, :null=>false
table.column :amount, :decimal, :scale=>2, :precision=>10, :null=>false
table.column :category_id, :integer, {:null=>false, :default =>1}
end
Теперь набор записей, возвращаемых запросом, не соответствует следующему утверждению
assert_equal 800, operatingExpenses[1].totalAmount
<800> expected but was <"800.00">.
Почему столбец «Сумма / агрегат» возвращается в виде строки, а не того же типа данных, что и итоговый столбец базы данных? Я хотел бы избежать разбрызгивания .to_s
или .to_f
везде, чтобы обойти это. Есть идеи?
То, что я пытаюсь получить в конце этой радуги, - это перечисление денежных потоков, подобное этому - (для указанного диапазона дат .. дополнительное условие для запроса, указанного выше).
cat Type Heading TotalAmount
| Operating | ExpCatX001 | 4000 |
| | ExpCatX002 | 200 |
| Financing | ExpCatX003 | 1000 |
| Investing | ExpCatX004 | 4234 |
| | ExpCatX005 | 201 |