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

时间:2020-08-20 17:35:30

标签: ruby-on-rails activerecord

我有一个带有小数点列的简单模型

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

3 个答案:

答案 0 :(得分:1)

我在应用中使用 [OutputCache(Duration = 3600, VaryByParam = "model.Content.UpdateDate.Ticks", Location = OutputCacheLocation.Server)] public override ActionResult Index(RenderModel model) { return (model) } 来获取成本和数量,对我来说很好用!

答案 1 :(得分:0)

如果用户无法输入$符号,会不会更容易?

您可以使用正则表达式并将输入限制为数字和小数:

(\ d +。\ d + | \ d + |。\ d +)

答案 2 :(得分:-1)

由于费用列是数据类型decimal,因此我认为您应该使用数字字段而不是文本字段。将您的<%= f.input :fee %>更改为<%= f.number_field :fee %>即可解决问题。