実現したいこと
空白を打ち込んだ際にエラーメッセージを表示させたい
前提
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
プログラミングを始めたばかりで何がおかしいのかがよく理解できていません...。
お手数をおかけしますが教えていただけると幸いです。
よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー