验证的最大字符数不能正常工作



想要实现

感谢收看。
我正在使用Rails开发。
我已经在模型上设置了验证,但是最大字符数的验证不能正常工作。


company.rb
validates :price,
length: { maximum: 23 },
presence: true,
numericality: true

像这样写,
然后使用以下形式:当输入23个字符(10000000000000000000000)时,验证将被触发

顺便说一下,22个字符(1000000000000000000000000)也通过了验证21个字符(1000000000000000000000000)通过验证

Form.vue

<template>
<main>
<form>
<fieldset>
<legend>price</legend>
<div class="form-row">
<b-form-input class="form-control" type="text"></b-form-input>
</div>
</fieldset>
</form>
</main>
</template>

schema.rb

create_table "companies", id: :bigint, unsigned: true, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
・
・
・
t.decimal "price", precision: 24, scale: 4
・
・
・

参数(当输入23个字符并捕获验证时)

Parameters: {"price"=>"10000000000000000000000"}

当我查看参数时,它们是字符串,所以我更改了控制器接收参数的位置,但它仍然无法验证。

def create_company_params
params.require(:company).permit(
).tap do |v|
v[:price] = v[:price].to_i
end
end

我不明白为什么验证中的最大字符数与我在模型中设置的不同。

如果你有什么建议,请告诉我。

环境Ruby 2.6Ruby on Rails 6.0

t.decimal "price", precision: 24, scale: 4

它会给你总共24位数字,小数点后面有4。

关于验证,如果你希望:price总是四位小数,你可以试试这个

validates :price, presence: true, format: { with: /Ad+(?:.d{4})?z/ }, numericality: { greater_than: 0, less_than: 999999999999999999999999 }

如果你希望:price最多有四位小数或更少(即:7,7.9,7.99,7.999,7.9999),你可以试试这个

validates :price, presence: true, format: { with: /Ad+(?:.d{0,4})?z/ }, numericality: { greater_than: 0, less_than: 999999999999999999999999 }

注意:less_than您可以指定db

中可以存储的最大数量如果你仍然看到问题,请关注这个博客

https://nelsonfigueroa.sh/handling-decimal-precision-in-rails/

相关内容

  • 没有找到相关文章

最新更新