質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

803閲覧

Rails5 validatesエラー時にrenderできない

b_kazu

総合スコア26

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/01/14 03:23

編集2019/01/14 23:35

validateエラーメッセージが表示できなくなりました。
必須項目を空のままsubmitすると何もおきません。
validateの条件通りに正しく入力すればその先は意図通りに動作します。

createアクションでrender 'new'のかわりにrender plain: errors.inspectをためしたところエラーの内容が表示されず、画面は遷移せず何もおきませんでした。

以前はnew画面でエラーメッセージの表示もできていました。
deviseの導入作業をし終えて気がついたら上記の状態になっていました。

==環境==
ruby 2.5.3p105
rails 5.2.2

==主なコード==
アプリ名: Myapp
モデル名: Article

app/controllers/articles_controller.rb

ruby

1class ArticlesController < ApplicationController 2 before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy] 3 4 def index 5 @articles = Article.all.order(updated_at: 'desc').limit(2) 6 end 7 8 def show 9 @article = Article.find(params[:id]) 10 end 11 12 def new 13 @article = Article.new 14 end 15 16 def create 17 @article = current_user.articles.new(article_params) 18 19 if @article.save 20 redirect_to articles_path 21 else 22 render plain: @article.errors.inspect 23 24 #@article = Article.new(article_params) 25 #render 'new' 26 end 27 end 28 29 def edit 30 @article = Article.find(params[:id]) 31 unless @article.user_id == current_user.id 32 redirect_to articles_path 33 end 34 end 35 36 def update 37 @article = Article.find(params[:id]) 38 if @article.update(article_params) 39 redirect_to articles_path 40 else 41 render 'edit' 42 end 43 end 44 45 def destroy 46 @article = Article.find(params[:id]) 47 if @article.user_id == current_user.id 48 @article.destroy 49 redirect_to articles_path 50 else 51 redirect_to articles_path 52 end 53 end 54 55 private 56 def article_params 57 params.require(:article).permit(:title, :result) 58 end 59end

app/models/article.rb

ruby

1class Article < ApplicationRecord 2 validates :title, presence: true 3 4 belongs_to :user 5end

config/application.rb

ruby

1require_relative 'boot' 2require 'rails/all' 3 4Bundler.require(*Rails.groups) 5 6module Myapp 7 class Application < Rails::Application 8 config.load_defaults 5.2 9 config.i18n.default_locale = :ja 10 end 11end

==追記==
下記を試しました。
createアクションの条件分岐を下記のように書き換えnew.html.erbに<p><%= @article.errors.size %></p>を追記して、必須項目を空白のままsubmitしたにもかかわらず0が返ってきました。

ruby

1 if @article.save 2 redirect_to articles_path 3 else 4 #render plain: @article.errors.inspect 5 6 @article = Article.new(article_params) 7 render 'new' 8 end

==追記 2019/01/15==

下記を試しました。
createアクションの条件分岐を書き換え、saveされないときに、redirect_to new_article_pathとしたらページ遷移してnewページのトップ位置に戻るようになりましたがエラーメッセージは取得できませんでした。

これだとnewページのトップに遷移するがエラーメッセージは取得できない

ruby

1 if @article.save 2 redirect_to articles_path 3 else 4 #render plain: @article.errors.inspect 5 6 @article = Article.new(article_params) 7 redirect_to new_article 8 end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

app/views/articles/new.html.erb内のform_withlocal: trueオプションをつけたらvalidatesエラー時にrender plain: @article.errors.inspectrender 'new'が意図通りに動くようになりました。
どこかの段階でform_forをform_withに書き換えていたようです。

参考にした記事

Rails 5.1のform_withでViewにvalidationエラー表示
https://qiita.com/k_senbei/items/a361171f653edcd888ad

Rails5.1のform_withを使ってうまくredirectできないあなたへ
https://kimuraysp.hatenablog.com/entry/2017/07/08/233754

2019/01/17追記
form_withだとvalidationエラーからの再submit時に挙動がおかしいのでform_forに戻しました。

投稿2019/01/15 00:09

編集2019/01/17 02:37
b_kazu

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問