【Rails】numericalityを使って属性に数値のみが使われている事を検証する
こんばんは!
validationのnumericalityヘルパーの備忘録
DBに保存されちゃう
<%= form_for @post do |f| %>
<%= f.label :price %>
<%= f.text_field :price %>
<% end %>
form_for
内のtext_field
に全角数字を入れるとDBには「0」で保存されてしまう。カラムの型はinteger
modelにnumericalityを追加
class Post < ApplicationRecord
validates :price, numericality: { only_integer: true }
end
:only_integer
をtrue
に設定すると、属性の値に対するvalidationで/\A[+-]?\d+\z/
の正規表現が使われます。これで全角数字はDBに保存されず弾かれるようになります
オプション色々
:greater_than
指定された値よりも大きくなければならないことを指定します。デフォルトのエラーメッセージは「must be greater than %{count}」です。
:greater_than_or_equal_to
指定された値と等しいか、それよりも大きくなければならないことを指定します。デフォルトのエラーメッセージは「must be greater than or equal to %{count}」です。
:equal_to:
指定された値と等しくなければならないことを示します。デフォルトのエラーメッセージは「must be equal to %{count}」です。
:less_than:
指定された値よりも小さくなければならないことを指定します。デフォルトのエラーメッセージは「must be less than %{count}」です。
:less_than_or_equal_to:
指定された値と等しいか、それよりも小さくなければならないことを指定します。デフォルトのエラーメッセージは「must be
less than or equal to %{count}」です。
:other_than:
渡した値以外の値でなければならないことを指定します。デフォルトのエラーメッセージは「must be other than %{count}」です。
:odd:
trueの場合は奇数でなければなりません。デフォルトのエラーメッセージは「must be odd」です。
:even: trueの場合は偶数でなければなりません。デフォルトのエラーメッセージは「must be even」です。
まとめ
整数の値のみ扱いたいのでればnumber_field
使えばいい事に気づきました
終わり
Author And Source
この問題について(【Rails】numericalityを使って属性に数値のみが使われている事を検証する), 我々は、より多くの情報をここで見つけました https://qiita.com/suzy1031/items/c3220a3749aec48d3d43著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .