从表格中的价格中删除美元符号和逗号

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\.]/, '') 来计算成本和数量,它对我来说效果很好!