Rails renderでなくredirect_toを使用して、別コントローラーのアクションにエラーメッセージを受け渡したい
今回はエラーメッセージを表示について少し深掘りました
バリデーションを設定の上、createやupdateにエラーメッセの表示には以下みたいな感じで
変数.valid?=>false//返り値
変数.errors.full_messages=>エラー文が生成される
という流れなわけですが、
def create @post = Post.new(post_params) if @post.valid? @post.save redirect_to post_path(@post.id), notice: '投稿しました' else render :new end end
表示させるためにはredirect_toを使用すると新しいページに遷移するためエラーの内容が受け渡されないらしい。
つまりrenderを使用するのが基本なのだけれど,,,
私の場合render先のアクションがビュー表示のために読み込んでる変数がいくつかあって再度記述するのが嫌ーでしたw
なので
redirect_toを使ってコントローラーを経由して欲しいという願望の下検討したところあるではありませんかw
参考にしたサイトさんのコメントをお借りすると”素直にflashに渡す”ということ。
ということで以下ソースがその内容です!
def create comment = Comment.new(comment_params) if comment.valid? comment.save redirect_to post_path(comment.post.id), notice: "コメントを投稿しました。" else redirect_to post_path(comment.post.id), flash: { error: comment.errors.full_messages } end end
ありがとうございました