ruby on railsでrender を使ったリロードエラーについて
ruby one rails についての質問です。
新規投稿をしたとき、空欄のままクリックするとエラーメッセージがでてくるようにしました。
しかしエラーメッセージが出てからリロードをすると url が変わってエラーになってしいます。
自分で調べてみたところ、 render ではなく redirect_to を使うと解消できるという記述が多かったので試してみたところエラーにならなくなりました。
しかしエラーメッセージが消えてしまうので、エラーメッセージはそのままリロードできるようにしたいです。
ルートを無理やり変えてエラーにならなくしても、同じくエラーメッセージは消えてしまいます。
どなたかご教授ください。よろしくお願いします。
以下 コードになります。
##routes
Rails.application.routes.draw do
get 'books/new' => 'books#new'
get 'books/index' => 'books#index',as: 'index_book'
post 'books' => 'books#create'
delete 'books/:id' => 'books#destroy',as: 'destroy_book'
get 'books/:id/show' => 'books#show',as: 'book'
get 'books/:id' => 'books#edit',as: 'edit_book'
patch 'books/:id' => 'books#update' ,as: 'update_book'
get '/' => 'homes#top'
end
##controller
class BooksController < ApplicationController
def index
@books = Book.all.order(created_at: :desc)
@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)
else
@books = Book.all.order(created_at: :desc)
render 'index'
end
end
def destroy
@book = Book.find(params[:id])
@book.destroy
redirect_to '/books'
end
def show
@book = Book.find_by(id: 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 updated."
redirect_to book_path
else
render 'edit'
end
end
private
def book_params
params.require(:book).permit(:title ,:body)
end
end
##html
<% if @book.errors.any? %>
<%= @book.errors.count %>errors prohibited this book from being saved:
<% @book.errors.full_messages.each do |message| %>
<%= message %>
<% end %>
<% end %>
<%= form_with model: @book, url: books_path , local: true do |f| %>
<p class="new-books-text">Title</p>
<%= f.text_field :title ,class:"text-field"%>
<div class="new-body">
<p class="new-books-text">Body</p>
<%= f.text_area :body ,class:"text-area"%>
</div>
<%= f.submit 'Create Books', class: "buttom"%>
<% end %>