前提・実現したいこと
データベースに保存しないで、indexアクションの入力内容を、confirmアクションにPOST送信する際、
バリデートチェックをかけて、入力欄が空であればindexアクションに戻り、
エラーメッセージを表示することを考えています。
その実装が一応できたのですが、現在のコードは、
バリデートクラスのインスタンス変数のフィールドに、POSTで受け取ったパラメータごとに代入するという処理の為、
受け取るパラメータが多いと、非常に長いコードになってしまう為(詳細は後述のコードのコメントの処理)、
バリデートクラスをnewしたときに、コンストラクタでフィールドをセットする処理に改善したいと考えています。
試したこと
単純にparamsをコンストラクタにセットするとエラーになってしまうので、
ストロングパラメータというものを使ってセットするようにしたのですが、
このストロングパラメータというものがよくわからなくて、
indexで未入力でPOST送信すると、下記エラーが発生してしまいます。
ストロングパラメータというものは、パラメータが送られても、
そのパラメータ値が空だとエラーを起こしてしまうのでしょうか?
これだと目的の空チェックを行う前に、空でエラーを起こしてしまい、意図したエラーメッセージ表示ができません。
ご教示お願いします。
param is missing or the value is empty: post Parameters: {"id"=>"", "pass"=>""}
・バリデートクラス。
class SampleValidate include ActiveModel::Model attr_accessor :id, pass validates :id, presence: true validates :pass, presence: true end
・コントローラ。
コメントの処理で実装できているのですが、
パラメータが多いと、フィールドにセットするコードが長くなってしまうので、
SampleValidate.newのときに、フィールドにセットするように改善したいです。
ruby
1class SamplesController < ApplicationController 2 protect_from_forgery 3 def index 4 @svalidate = SampleValidate.new 5 end 6 7 def confirm 8 # @svalidate = SampleValidate.new 9 @svalidate = SampleValidate.new(post_params) 10 # @svalidate.id = params[:id] 11 # @svalidate.pass = params[:pass] 12 if @svalidate.valid? 13 render 'confirm' 14 else 15 render 'index' 16 end 17 end 18 19 private 20 def post_params 21 params.require(:post).permit(:id, :pass) 22 end 23end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/15 08:10