LoginSignup
6
4

More than 5 years have passed since last update.

数値型設定のカラムに画面から全角数字の入力値をモデルで受け取り、半角数字変換する

Posted at

はじめに

データベースでINTなどの数値型設定をしているカラムに対し、画面から全角数字を入力したとしても、半角数字に変換して通したいと言ったニーズがあった場合、numericalityのバリデーションだと文字列扱いでエラーとなってしまいます。
ユーザーの入力値を強制的に変換させ、バリデーションにかからないようにする処理を書きました。
(フロントエンド側で処理する方法もありますが、ここではモデルで解決する方法を記載しています)

app/models/item.rb
class Item < ActiveRecord::Base
  validates :price, numericality: { only_integer: true }

  def price=(value)
    value.tr!('0-9', '0-9') if value.is_a?(String)
    super(value)
  end
end
6
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4