从表格中的价格中删除美元符号和逗号
Remove dollar sign and comma from price in form
我有一个带小数列的简单模型
class CreateCourses < ActiveRecord::Migration[6.0]
def change
create_table :courses do |t|
t.decimal :fee, precision: 12, scale: 2
end
end
end
class Course < ApplicationRecord
validates :fee, presence: true, numericality: { greater_than: 1, less_than: 1000 }
end
<%= simple_form_for @course do |f| %>
<%= f.input :fee %>
<%= f.button :submit %>
<% end %>
如果用户在表单中输入美元符号,我该如何删除它?目前它给我这个错误 Fee can't be blank and Fee is not a number
。我尝试了以下但它给了我另一个错误 undefined method delete for 0.5e1:BigDecimal
class Course < ApplicationRecord
validates :fee, presence: true, numericality: { greater_than: 1, less_than: 1000 }
before_validation :clean_fee
private
def clean_fee
self.fee = fee.delete('$ ,')
end
end
如果用户不能输入 $ 符号,会不会更简单?
您可以使用正则表达式并将输入限制为数字和小数:
(\d+.\d+|\d+|.\d+)
由于您的费用列是数据类型 decimal
,我认为您应该使用数字字段而不是文本字段。将 <%= f.input :fee %>
更改为 <%= f.number_field :fee %>
即可。
我在我的应用程序中使用 ’,123’.gsub(/[^0-9\.]/, '')
来计算成本和数量,它对我来说效果很好!
我有一个带小数列的简单模型
class CreateCourses < ActiveRecord::Migration[6.0]
def change
create_table :courses do |t|
t.decimal :fee, precision: 12, scale: 2
end
end
end
class Course < ApplicationRecord
validates :fee, presence: true, numericality: { greater_than: 1, less_than: 1000 }
end
<%= simple_form_for @course do |f| %>
<%= f.input :fee %>
<%= f.button :submit %>
<% end %>
如果用户在表单中输入美元符号,我该如何删除它?目前它给我这个错误 Fee can't be blank and Fee is not a number
。我尝试了以下但它给了我另一个错误 undefined method delete for 0.5e1:BigDecimal
class Course < ApplicationRecord
validates :fee, presence: true, numericality: { greater_than: 1, less_than: 1000 }
before_validation :clean_fee
private
def clean_fee
self.fee = fee.delete('$ ,')
end
end
如果用户不能输入 $ 符号,会不会更简单?
您可以使用正则表达式并将输入限制为数字和小数:
(\d+.\d+|\d+|.\d+)
由于您的费用列是数据类型 decimal
,我认为您应该使用数字字段而不是文本字段。将 <%= f.input :fee %>
更改为 <%= f.number_field :fee %>
即可。
我在我的应用程序中使用 ’,123’.gsub(/[^0-9\.]/, '')
来计算成本和数量,它对我来说效果很好!