前提・実現したいこと
データベースに保存しないで、indexアクションの入力内容を、confirmアクションにPOST送信する際、
バリデートチェックをかけて、入力に不備があればindexアクションに戻り、エラーメッセージを表示することを考えています。
その実装が一応できたのですが、
おそらく設計が変だと自覚している為、改善方法のご教示をお願い致します。
試したこと。
・バリデートクラス。
class SampleValidate include ActiveModel::Model attr_accessor :id, pass validates :id, presence: true validates :pass, presence: true end
・コントローラ。
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.id = params[:id] 10 @svalidate.pass = params[:pass] 11 if @svalidate.valid? 12 render 'confirm' 13 else 14 render 'index' 15 end 16 end 17end
indexのテンプレートファイルでは、@svalidateを埋め込んでエラーメッセージを表示させています。
この実装に関して、以下2点がおかしいような気がするのですが、改善可能でしたら、ご教示お願いします。
・1点目。 indexのテンプレートで@svalidateのエラーメッセージを埋め込む為に、 バリデートクラスを2回newしている点。 可能であれば、1回のnewで済む方法があれば教えていただきたいです。 アクション間で、共通のインスタンス変数を認識する方法ってないですか? もしくは簡単にアクション間でインスタンス変数を渡せないですか? ・2点目。 バリデートに引っ掛かっているとき、renderでindexを表示している点。 URLがconfirmのもので、indexが表示されます。 confirmはルーティングでPOSTからの受付しか許可していないので、 ブラウザをリロードすると、URLがconfirmのときのindexページはエラーを起こします。 リダイレクトでindexアクションを表示すればいいのかもしれませんが、その場合、@svalidateをリダイレクト先のindexアクションに引き継がせる方法がわかりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/15 02:21