railsのformで数値に制限をかけるメモ

モデルで数値にvalidationをかけているときに、入力フォームでも制限を掛けたいと思ったので調べました!


モデル

events.rb

validates :person_num, presence: true, numericality: { greater_than_or_equal_to: 1, less_than: 100 }

モデルにはこんな感じで、数値が1以上100以下でしか登録できないようにしています。

ですが、ビューの入力フォームでは、−10などの値が入力できてしまいます。(もちろん登録のときには、はじかれます)


ビュー

ビューにも制限を掛けていきます。

<%= form_with(model: @event) do |f| %>

(略)

<div class="field my-3">
<%= f.label :person_num %>
   <%= f.number_field :person_num, in: 1..100 %> 👈 これ
 </div>


 <div class="actions">
   <%= f.submit %>
 </div>
<% end %>


こんな感じで、in: ○〜○○ で数値の値を決めることができます!

こうすることで、フォームに-10などを直接打ち込むと、エラーメッセージが動的に表示されます。

また、number_fieldの上下矢印を押しての数値の変換も範囲内でしか選択できないようになります。


まとめ

モデルで制限をかけるだけでなく、ビューでも制限をかけることが、ユーザーにとっても大事かなと思いました。

下記のサイトに他のオプションも記載されています!

https://railsdoc.com/page/number_field

この記事が気に入ったらサポートをしてみませんか?