学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Rails導入編 | カート機能の実装 | 09 | バリデーション(検証)

↓↓クリックして頂けると励みになります。




08 | 商品リストの外観を整える】 << 【ホーム】 >> 【10 | バリデーションの日本語化



Railsのバリデーション(Validation)は、Active Recordモデルにおいてデータの整合性を保つために使用される機能です。
データベースに保存される前に、モデルの属性が特定の条件を満たしているかどうかを検証するために利用されます。
これにより、無効なデータがデータベースに保存されるのを防ぐことができます。

では早速、アプリケーションに入力検証の機能を実装していきます。


Goodモデルに「validates :title, :description, :image_url, presence: true」というコードを追加します。
「validates()」メソッドはRailsに標準で用意されている検証メソッドです。
モデルのフィールドを条件に照らしてチェックします。
「presence: true」は指定されたフィールドが存在し、その内容が空でないことを確認せよという意味のパラメータです。
「SampleCart/app/models/good.rb」ファイルを以下のように編集します。


記述追加 【SampleCart/app/models/good.rb】2行目

class Good < ApplicationRecord
    validates :title, :description, :image_url, presence: true
end



では「商品登録」のリンクから登録フォームに移動し、フィールドが空の状態で「商品登録」ボタンを押してみます。

エラーメッセージの表示
エラーメッセージの表示



もう一つ、バリデーションを追加します。
価格フィールドに入力された数が有効な値かどうかをチェックします。
「numericality()」オプションを使い「validates :price, numericality: {greater_than_or_equal_to: 1}」として1以上の数字のみの許可を与えます。


記述追加 【SampleCart/app/models/good.rb】3行目

class Good < ApplicationRecord
    validates :title, :description, :image_url, presence: true
    validates :price, numericality: {greater_than_or_equal_to: 1}
end


数字の判定
数字の判定



次は商品につけた名前が他の商品と重複していないかどうかを確認します。
4行目に「validates :title, uniqueness: true」の記述を追加しています。


記述追加 【SampleCart/app/models/good.rb】4行目

class Good < ApplicationRecord
    validates :title, :description, :image_url, presence: true
    validates :price, numericality: {greater_than_or_equal_to: 1}
    validates :title, uniqueness: true
end


タイトル重複確認
タイトル重複確認



画像のURLが「.gif」「.jpg」「.png」のどれかで終わっていることを確認します。
これには正規表現を利用します。

validates :image_url, allow_blank: true, format: {
	with: %r{\.(gif|jpg|png)\z}i,
	message: 'はGIF、JPG、PNG画像のURLでなければなりません。'
}



記述追加 【SampleCart/app/models/good.rb】6行目

class Good < ApplicationRecord
    validates :title, :description, :image_url, presence: true
    validates :price, numericality: {greater_than_or_equal_to: 1}
    validates :title, uniqueness: true

    validates :image_url, allow_blank: true, format: {
        with: %r{\.(gif|jpg|png)\z}i,
        message: 'はGIF、JPG、PNG画像のURLでなければなりません。'
    }
end


正規表現による画像URLの検証
正規表現による画像URLの検証



08 | 商品リストの外観を整える】 << 【ホーム】 >> 【10 | バリデーションの日本語化




↓↓クリックして頂けると励みになります。

関連記事(外部サイト)