我正在构建一个Rails应用程序,允许用户通过在UI中输入值来编目轮胎。当我创建tire
类时,我将其设为
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
后,程序的行为没有变化。难道这不是为了让UI可以接受浮动值吗?
编辑:在尝试将price
列设为浮点值之前,我尝试通过在此迁移中添加缺少的属性来修复decimal
值:
class MoneyDecimalFix < ActiveRecord::Migration[5.0]
def change
change_column :tires, :price, :decimal, :precision => 8, :scale => 2
end
end
在向前推进迁移之后,程序的行为仍然没有改变。
答案 0 :(得分:0)
虽然可以使用change_column
迁移来修改价格值以包含decimal
属性的规范,但因为create_table
是可逆迁移,所以建议改为回滚迁移并手动实现更改以最终读取
t.decimal :price, :precision => 8, :scale => 2
然后再次向前滚动。
值得注意的是,虽然在迁移中正确定义price
列是必不可少的步骤,但仅凭它不能解决不接受小数值的表单问题。
错误最终出现在我的观点中。在Rails中,number_field
标记本身不接受小数值,必须将其组合在一起。使用text_field
标记,以便这样做:
<%= f.number_field :price, class: :text_field, step: :any %>