前提・実現したいこと
ruby on railsで、本のタイトル、内容をフォームで記述できるようにした。
タイトルまたは内容フォームを空欄にした際のそのページでエラー表示する機能を実装したい。
実現したいこと
index内フォームに空欄あり → render 'index'を実行し_.errors.full_messages.eachでメッセージを出力
現状
render 'index'してもエラーメッセージなし
発生している問題・エラーメッセージ
フォームを空欄で登録してもエラーメッセージが出力されない
該当のソースコード
routes.rb
Rails.application.routes.draw do root 'books#top' resources :books # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end
book_controller.rb
class BooksController < ApplicationController def top end def index @books = Book.all @book = Book.new end def show @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) redirect_to book_path(@book.id) else @books=Book.all @book=Book.new render 'index' end end def create book = Book.new(book_params) if book.save redirect_to book_path(book.id) else @books=Book.all @book=Book.new render 'index' end end def destroy book = Book.find(params[:id]) book.destroy redirect_to books_path(book) end private def book_params params.require(:book).permit( :title, :body) #params.permit(:title, :body) end end
book.rb
class Book < ApplicationRecord validates :title , presence: true validates :body , presence: true end
index.html.erb
<table> <tr> <th>Title</th> <th>Body</th> <th></th> </tr> <% @books.each do |book| %> <tr> <th> <%= book.title %> </th> <th> <%= book.body %> </th> <th> <%= link_to "Show",book_path(book) %> <%= link_to "Edit",edit_book_path(book) %> <%= link_to "Destroy",book_path(book) , method: :delete %> </th> </tr> <% end %> </table> <h1>New book</h1> <%= form_for(@book) do |f| %> <% if @book.errors.any? %> <ul> <% @book.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> <% end %> <%= f.label :title%> <%= f.text_field :title%> <br> <%= f.label :body%> <%= f.text_area :body%> <%= f.submit%> <%end%>
show.html.erb
<p><span class="bold">title: </span><%= @book.title %></p> <p><span class="bold">body: </span><%= @book.body%></p> <%= link_to "Back",books_path%> <%= link_to "Edit",edit_book_path(@book)%>
edit.html.erb
<h1>Editing Book</h1> <%= form_for(@book) do |f| %> <% if @book.errors.any? %> <ul> <% @book.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> <% end %> <%= f.label :title%> <%= f.text_field :title%> <br> <%= f.label :body%> <%= f.text_area :body%> <%= f.submit%> <%end%> <%= link_to "Back",books_path%> <%= link_to "Edit",edit_book_path(@book)%>
top.html.erb
<h1>ようこそ、Bookersへ!</h1> <p> <span class="bold">Bookers</span>では、さまざまな書籍に関するあなたの意見や<br> 印象を共有し交換することができます </p> <%=link_to "start",books_path%>
Rails 6.0.2.2 ruby 2.6.3p62
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/06 03:08