Чтобы получить полный ответ - price
не должно быть строкой. Тот факт, что у вас сейчас 300 товаров, не имеет большого значения.
Выполнить миграцию:
rails generate migration decimalise
Затем отредактируйте его (db/migrate/*decimalise.rb
) и напишите что-то вроде этого:
class Decimalise < ActiveRecord::Migration
def up
connection = ActiveRecord::Base.connection()
# kill the weird chars in the string field
connection.execute("UPDATE products SET price = REPLACE(REPLACE(price, ',', ''), '$', '')")
# convert the string column into a decimal one
change_table :products do |t|
# adjust for your use case - this gives you values up to 9999999.99
# if you need more, increase the 10
t.column :price, :decimal, :precision => 10, :scale => 2
end
end
def down
change_table :products do |t|
t.column :price, :string, :limit => 10
end
end
end
затем, наконец, запустите
rake db:migrate
(не проверено, вам, вероятно, потребуется настроить. Кроме того, сделайте резервную копию вашей БД перед любыми манипуляциями - я не буду нести ответственность за любую потерю данных, которую вы испытываете)
РЕДАКТИРОВАТЬ Одна вещь, которую я забыл: как распечатать это.
<%= number_to_currency @product.price %>
должен дать вам что-то вроде $1,999.99
по цене 1999.99
.