前提・実現したいこと
viewからパラメータが渡されてcontrollerのnewメソッドが呼ばれるのですが、
createメソッド内で、バリデーションが効いた際にrender :new が呼ばれると、パラメータが渡されないため困っています。
renderの代わりにredirectを利用すると、パラメータを付与することはできますが、バリデーション表示ができなくなってしまいます。
パラメータを付与しつつ、バリデーションも表示するには、どのようにすればよいでしょうか?
該当のソースコード
Ruby
1class BokeVideosController < ApplicationController 2 3// 省略 4 5 def new 6 @boke_video = BokeVideo.new # フォーム用の空のインスタンスを生成する。 7 @boke_categories = BokeCategory.all 8 @video_id = params[:video_id] # viewから送られたパラメータを@video_idに格納する。createメソッドでバリデーションに引っかかった場合に、render :new時にパラメータがないためエラーが起こる。 9 @video = Video.find(@video_id) 10 end 11 12 def create 13 @boke_categories = BokeCategory.all 14 @boke_video = current_user.boke_videos.new(boke_video_params) # ストロングパラメータを引数に 15 if @boke_video.save 16 redirect_to @boke_video, notice: "動画を投稿しました。" 17 else 18 render :new 19 end 20 end 21 22 private 23 24 def boke_video_params # ストロングパラメータを定義する 25 params.require(:boke_video).permit(:video_id, :boke_category_id, :text, :tag_one, :tag_two, :tag_three) 26 end 27end 28
試したこと
render :newではなく、redirect_toに変えたところパラメータを渡すことはできたが、validationのメッセージが表示されないです。
Ruby
1 2 def create 3 @boke_categories = BokeCategory.all 4 @boke_video = current_user.boke_videos.new(boke_video_params) # ストロングパラメータを引数に 5 if @boke_video.save 6 redirect_to @boke_video, notice: "動画を投稿しました。" 7 else 8 @video_id = boke_video_params[:video_id] 9 redirect_to new_boke_video_path(video_id: @video_id) 10 end 11 end
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 08:31 編集
2021/04/23 08:39