こんばんは!
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
使えばいい事に気づきました