前提・実現したいこと
Ruby on Railsにて、
読んだ本のタイトル・内容を表示する
新規投稿・一覧ページ(どちらも同じページに表示)を作成しております。
空白で投稿した際に以下画像のエラーメッセージを表示したいのですが、
現状空白で投稿すると毎回真っ白なページに飛んでしまう問題が起きております。
また、このエラーメッセージを上記ページだけでなく、
詳細画面での空白投稿でも表示させていきたいです。
始めたての初心者のため、webで検索をかけ記載を変える等試みたのですがエラーが余計に増えてしまい行き詰まってしまいました。
お手数をおかけいたしますが、どなたかご教授いただけると幸いでございます。
発生している問題・エラーメッセージ
何も入力せず投稿ボタンを押すと真っ白な画面が表示されてしまう。
(入力有りの通常の投稿は正常に動いております。)
index.html.rb
1 2<!DOCTYPE html> 3<html> 4 5 <body> 6 7 <h1>Books</h1> 8 9<table> 10 11<thead> 12 <tr> 13 <th>title</th> 14 <th>body</th> 15 <th></th> 16 </tr> 17</thead> 18 19<tbody> 20 21<% @book.each do |book| %> 22<tr> 23 <td><%= book.title %></td> 24 <td><%= book.body %></td> 25 <td> 26 <%= link_to "Show", book_path(book.id) %> 27 <%= link_to "Edit", edit_book_path(book.id) %> 28 <%= link_to "Destroy", update_book_path(book.id), method: :delete, "data-confirm" => "Are you sure?" %> 29 30 </td> 31 </tr> 32 <% end %> 33 34 35</tbody> 36</table> 37 38<h3>New book</h3> 39<% if @books.errors.any? %> 40 <%= @books.errors.count %> 41 <% @books.errors.full_messages.each do |message| %> errors prohibited this obj from being saved 42 <%= message %> 43 <% end %> 44 <% end %> 45 </ul> 46 </div> 47 48 49<%= form_with model: @books, url:'/books', local:true do |f| %> 50 51 52<h4>Title</h4> 53<%= f.text_field :title %> 54 55<h4>Body</h4> 56<%= f.text_area :body %> 57 58<br><%= f.submit 'Create Book' %></br> 59 60<% end %> 61 62 63</form> 64</body> 65</html> 66
<routes.rb>
Rails.application.routes.draw do root 'homes#top'
get 'books' =>'books#index'
post 'books' => 'books#create'
get 'books/:id' => 'books#show', as: 'book'
get 'books/:id/edit' => 'books#edit', as: 'edit_book'
patch 'books/:id' => 'books#update', as: 'update_book'
put 'books/:id' => 'books#update'
delete 'books/:id' => 'books#destroy'
end
<books_controller.rb>
class BooksController < ApplicationController
def index
@book = Book.all
@books = Book.new
end
def show
@book = Book.find(params[:id])
end
def create
@book = Book.new(book_params)
if @book.save
redirect_to book_path(@book.id)
else
render :new
end
end
def edit
@book = Book.find(params[:id])
end
def update
book = Book.find(params[:id])
book.update(book_params)
redirect_to book_path(book.id)
end
def destroy
@book = Book.find(params[:id])
@book.destroy
redirect_to books_path
end
private
def book_params
params.require(:book).permit(:title, :body)
end
end
<book.rb>
class Book < ApplicationRecord
validates :title, presence: true
validates :body, presence: true
end
###<edit.htmi.rb>
<h1>Editing Book</h1> <%= form_with model:@book, url:"/books/#{@book.id}", local:true do |f| %> <h4>Title</h4> <%= f.text_field :title %> <h4>Body</h4> <%= f.text_area :body %> <p> <%= f.submit 'Update Book' %> <% end %> </p><%= link_to "show", book_path(@book.id) %>
|
<a class="back" href="/books">Back</a>
回答1件
あなたの回答
tips
プレビュー