前提・実現したいこと
Railsを使って開発を行っています。
モデルにvalidatesを設定して、バリデーションを行っていますが、最大文字数のバリデーションが正常に動きません
company.rb
validates :price, length: { maximum: 23 }, presence: true, numericality: true
このように記述して、フォームから
23文字(10000000000000000000000)入力した際にバリデーションに引っかかります。
ちなみに、
22文字(1000000000000000000000)もバリデーションに引っかかって、
21文字(100000000000000000000)にした場合にバリデーションが通りました。
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 ・ ・ ・
params(23文字入力して、バリデーションに引っかかったとき)
Parameters: {"price"=>"10000000000000000000000"}
パラメータをみたときに文字列になっていたので、controllerのパラメータを受け取るところで、v[:price] = v[:price].to_i としましたが、やはり、バリデーションに失敗しました。
def create_company_params params.require(:company).permit( ).tap do |v| v[:price] = v[:price].to_i end end
なぜバリデーションの最大文字数が、モデルに設定したものと差異があるのか、わかりません。
みなさまのお知恵をお貸しいただければと思います。
環境
Ruby 2.6
Ruby on Rails 6.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。