Привет! Я старый программист на Delphi, делающий скачок к Mac, Ruby, Rails и веб-программированию в целом. Я записался на семинар Advanced Rails в конце месяца. Тем временем я работал над переносом критически важного (конечно) приложения из Delphi в RAILS. Такое ощущение, что я провел большую часть прошлого года с головой, спрятанной в книге или подкасте.
Прямо сейчас у меня возникла серьезная проблема, и я вырываю волосы. Я буквально не знаю, куда идти с этим, я отчаянно не хочу развертывать с этой ошибкой, и я чувствую себя немного безумным. (База данных компании в настоящее время работает на старом Windows XP, который выглядит все более грязным с каждым днем.)
Итак, я настроил тестовую базу данных, которая показывает проблему. Я бегу:
OS/X 10.6.3
Rails 2.3.5
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]
MySQL 5.1.38-log via socket
MySQL Client Version 5.1.8
ActiveRecord::Schema.define(:version => 20100406222528) do
create_table “money”, :force => true do |t|
t.decimal “amount_due”, :precision => 10, :scale => 2, :default => 0.0
t.decimal “balance”, :precision => 10, :scale => 2, :default => 0.0
t.text “memofield”
t.datetime “created_at”
t.datetime “updated_at”
end
Представление индекса прямо из генератора, немного изменено, чтобы добавить форматирование, которое мне мешает.
Listing money
<table>
<tr>
<th>Amount</th>
<th>Amount to_s </th>
<th>Balance to $</th>
<th>Balance with_precision </th>
<th>Memofield</th>
</tr>
<% @money.each do |money| %>
<tr>
<td><%=h money.amount_due %></td>
<td><%=h money.amount_due.to_s(‘F’) %></td>
<td><%=h number_to_currency(money.balance) %></td>
<td><%=h number_with_precision(money.balance, :precision => 2) %></td>
<td><%=h money.memofield %></td>
<td><%= link_to ‘Show’, money %></td>
<td><%= link_to ‘Edit’, edit_money_path(money) %></td>
<td><%= link_to ‘Destroy’, money, :confirm => ‘Are you sure?’, :method => :delete %></td>
</tr> *<% end %> *</table>
<%= link_to ‘New money’, new_money_path %>
Казалось, это работает довольно хорошо. Затем я начал тестирование с производственными данными и столкнулся с серьезной проблемой с number_to_currency.
Номер в базе данных: 10542.28, я проверил его с помощью MySQL Query Browser. RAILS будет отображать это как 10542.28 , если только я не позвоню number_to_currency, тогда этот номер будет отображаться как: $ 15422.80
Похоже, ошибка возникает с любым числом от 10 000,00 до 10 999,99. Пока я не видел его за пределами этого диапазона, но, очевидно, я не все проверял.
Полагаю, мой обходной путь - удалить number_to_currency, но это оставляет взгляды действительно небрежными и непрофессиональными. Форматирование сбито с толку, все выстроено неправильно, и я не могу заставить дисплей отображать 2 десятичных знака.
Я серьезно надеюсь, что это легко исправить. Я не могу представить, что это широко распространенная проблема. Это затронет так много людей, что кто-то исправит это! Но я не знаю, куда идти отсюда.
Мне отчаянно нужна помощь.
(Позже - number_with_precision завершается ошибкой так же, как number_to_currency.)
Сью Петерсен