LoginSignup
3
6

More than 3 years have passed since last update.

(ECサイト)注文情報入力時におけるバリデーション

Last updated at Posted at 2020-09-26

前提条件

ECサイトで注文情報入力 ==> 注文確認画面の間に注文情報入力でバリデーションをかけたい

1.よく使うバリデーション

app/models/book.rb
validates :title, presence: true

などの普段よく使うバリデーションは
booksテーブルにtitleというカラムがあり
データベースに保存される時、つまり @book.save(book_params)の時にtitleカラムが空白だとバリデーションがかかる。
しかし、ECサイトで注文情報入力 ==> 注文確認画面
 ==> 注文確定(ここで.saveが行われる)というフローで実装する際、注文情報入力 ==> 注文確認画面の間に.saveが発生しない為、モデルにかけるバリデーションをrenderで呼び出すことができない為if文で条件分岐を書いてflash[:notice]を使う必要がある。

2.if文の実装

app/controllers/order_controllers.rb
when 3
        if    params[:order][:new_add][:postal_code] == "" && params[:order][:new_add][:address] == "" && params[:order][:new_add][:name] == ""
              flash[:notice] = "新しいお届け先が全て入力されていません"
              redirect_to new_order_path
        elsif params[:order][:new_add][:postal_code] == ""
              flash[:notice] = "郵便番号が入力されていません"
              redirect_to new_order_path

        elsif params[:order][:new_add][:address] == ""
              flash[:notice] = "住所が入力されていません"
              redirect_to new_order_path
        elsif params[:order][:new_add][:name] == ""
              flash[:notice] = "宛名が入力されていません"
              redirect_to new_order_path
        else
            @order.postal_code = params[:order][:new_add][:postal_code]
            @order.address = params[:order][:new_add][:address]
            @order.name = params[:order][:new_add][:name]
        end
 end

3.コードの説明

まず、case文を使い、ラジオボタンを3個order/new.html.erbに書きwhenで3パターン分岐させている。
そして、3個目のラジオボタンを選ぶと注文情報入力時に新しいお届け先を入力できるように実装している。
[:new_add] は注文情報入力時に新しいお届け先を入力する際のパラメータ。

app/controllers/order_controllers.rb
params[:フォームで送られてくる値] == ""
flash[:notice] = ”ホニャホニャ"

と書くことで空欄の時にフラッシュメッセージを出せる。

4.今回の実装を終えて

当初 == nil にしており値が返ってきていなかったがターミナルを見ると""になっていたので条件文を変えるとうまくいった。
&&で条件文を繋ぐ時に最後に一個だけイコールを入れるのではなく毎回イコールが必要である。

5.リファクタリング

if文をelsifで繋いで条件文を書きまくるのはあまり良くないらしいので他にいい方法があれば教えてください。

3
6
0

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
3
6