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

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

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

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

Q&A

解決済

1回答

582閲覧

エラーメッセージを表示させたい

auuuuuuun

総合スコア1

Ruby on Rails

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

0グッド

0クリップ

投稿2023/03/24 09:19

編集2023/03/24 12:17

実現したいこと

空白を打ち込んだ際にエラーメッセージを表示させたい

前提

ruby on rails にて本のタイトルと簡単な内容を投稿するサイトを作っています。それぞれの投稿に詳細、編集、削除ができます。

発生している問題・エラーメッセージ

本来空白で投稿するとエラーメッセージが表示されるはずなのですが、空白のまま投稿すると変更しようとする前の画面が表示されてしまいます(ページは移行されずエラーメッセージも表示されません)

該当のソースコード

<h1>Editing Book</h1> <% if @book.errors.any? %> <%= @book.errors.count %> errors prohibited this book from being saved: <ul> <% @book.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> <% end %> <%= form_with model: @book,url: book_path(@book.id),method: :patch do |f| %> <h4>Title</h4> <%= f.text_field :title %> <h4>Body</h4> <%= f.text_area :body %> <p> </p> <%= f.submit 'Update Book' %> <p> </p> <%= link_to "Show",book_path(@book.id) %> <%= link_to "Back", books_path %> <% end %>
class BooksController < ApplicationController def index @books = Book.all @book = Book.new end def create @book = Book.new(book_params) if @book.save flash[:notice] = "Book was successfully created." redirect_to book_path(@book.id) else @books = Book.all render :index end end def show @books = Book.all @book = Book.find(params[:id]) end def edit @book = Book.find(params[:id]) end def update @book = Book.find(params[:id]) if @book.update(book_params) flash[:notice] = "Book was successfully created." redirect_to book_path(@book.id) else @book = Book.find(params[:id]) render :show end end def destroy book = Book.find(params[:id]) book.destroy redirect_to '/books' end private def book_params params.require(:book).permit(:title, :body) end end
class Book < ApplicationRecord validates :title, presence: true validates :body, presence: true end

試したこと

編集する前の画面に戻ってしまうためエラーが表示されず、どこを修正したらいいのかわかりません...多分Controllerのupdateあたりがおかしいのかな?とは思うのですが変更したらエラーが出ました...
検索して考えてみたのですが書かれているコードが少し違っていたりとどこまで参考にしたらいいのかわかりませんでした。

以下参考
https://tanarizm.com/render-error-no-message
https://railsguides.jp/active_record_validations.html

補足情報(FW/ツールのバージョンなど)

使用しているrailsのバージョンです。
Rails 6.1.7.3

プログラミングを始めたばかりで何がおかしいのかがよく理解できていません...。
お手数をおかけしますが教えていただけると幸いです。
よろしくお願いします。

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

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

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

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

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

m.ts10806

2023/03/24 09:23

ちなみにどこでその入力チェックの設定をされてますか? 書籍とバージョンは同じですか?
auuuuuuun

2023/03/24 09:33

入力チェックはvalidatesで設定しています。 すみません、書籍の意味がわからなくて...;; 入力したvalidatesものせますね class Book < ApplicationRecord validates :title, presence: true validates :body, presence: true end こんな感じに入力していて、投稿の時は正常に動くのですが編集になるとエラーメッセージが表示されず編集前の元の画面になってしまう、といった感じです
m.ts10806

2023/03/24 09:39

質問は編集できますので。
m.ts10806

2023/03/24 09:41

失礼。「書籍の…」とあったのでそこを勘違いしました。 ちなみに何を参考にここまで実装しましたか? URLや参照記事なども質問本文へ追記してください。
auuuuuuun

2023/03/24 09:54

参考記事を追加してみましたが、正味何が正しいなどはわかって無いです(なぜこのコードを入力しなくてはいけないのかはなんとなく理解しました) 参考というか、以前入力した内容を元に入力した、の方が近いですね..
m.ts10806

2023/03/24 11:55

validates も追記お願いします。 Railsガイドを参照されているのでしたら、まず間違いはないです。 ※もちろん何のために書いてるのか等は理解しておいて得しかないです
auuuuuuun

2023/03/24 12:26

追記いたしました。 ガイドは一通り確認しているのですが、前述通り記入していたコードとガイドに書かれているコードが違うので(行っていることが同じなのは理解してます)自分が記入したコードでは何がおかしいのかがうまく把握できません。
guest

回答1

0

自己解決

なぜ、というのが理解できていませんが。
Controllerのupdate、elseの下の@book = Book.find(params[:id])を @books = Book.allにしたところ正常にバリデーションが実行されました。
とりあえず解決はできましたので自己解決とさせていただきます。

投稿2023/03/24 14:19

auuuuuuun

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問