Я создаю приложение Rails, которое позволяет пользователю каталогизировать шины, вводя значения в пользовательский интерфейс. Когда я создал tire
класс, я сделал это, какЯ не уверен, что правильно применяю миграцию изменений Rails
class CreateArticles < ActiveRecord::Migration[5.0]
def change
create_table :tires do |t|
t.decimal :price
...
end
end
Когда я запускал программу, я понял, что я забыл указать точность и масштаб атрибута decimal
. Это привело к тому, что программа не смогла принять нецелые значения и отобразить все значения, добавленные .0
Поскольку я был намного дальше по программе, я решил написать еще одну миграцию, чтобы просто изменить price
на float
, написав следующую миграцию:
class ChangeTiresToFloat < ActiveRecord::Migration[5.0]
def change
change_column :tires, :price, :float
end
После запуска db:migrate
, нет никаких изменений в поведении программы. Должно ли это не сделать так, чтобы пользовательский интерфейс мог принимать значения float?
Edit: Прежде чем прибегать к делая price
столбец значение с плавающей точкой, я пытаюсь исправить значение decimal
, добавив недостающие атрибуты этой миграции:
class MoneyDecimalFix < ActiveRecord::Migration[5.0]
def change
change_column :tires, :price, :decimal, :precision => 8, :scale => 2
end
end
После наката миграции, поведение программы все еще не изменился.
Не использовать поплавки для цен , http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency – max
Согласитесь с @max, вы можете использовать денежную библиотеку, такую как https://github.com/RubyMoney/money-rails –
Хотя после этого я планирую перейти на библиотеку Money после обновления, мне сначала хотелось узнать, что моя ошибка при реализации миграции. Почему это происходит, что движение вперед не приводит к изменению поведения программы. –