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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

2097閲覧

Rails 空白投稿のエラーメッセージの表示ができない

kurazira

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

1グッド

1クリップ

投稿2021/09/15 16:42

編集2021/09/15 18:59

前提・実現したいこと

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>

shinoharat👍を押しています

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

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

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

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

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

MasaSakano

2021/09/15 22:11

一番上の html.erb がどのファイルかわかりません。 Controllerにつき、このメソッドすべてが関係しますか? 絶対に関係しない部分(`destroy`とか?`)は省いて投稿した方がみやすくなります。 一番下の edit.htmi.rb はどういう関係があるのでしょう?
kurazira

2021/09/17 09:40

ご回答頂きありがとうございます!見にくくすみません、なんとか解決できました!
guest

回答1

0

ベストアンサー

  1. 一番上の htmlの様にほかのcodeも<code>を使ってください。
  2. indexでの @book、@booksを入れ替えてください。ここが一つの原因
  3. create で失敗して Render :new なので、new.html を表示してます。一番上に載っている view に戻りたいのでは?

投稿2021/09/15 23:44

winterboum

総合スコア23567

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

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

kurazira

2021/09/17 09:40

@book.@booksの入れ替えで解決できました!助かりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問