Rails1週間のド素人です…
Railsで本の登録を行うシステムを作っています。
タイトルと内容が空白の際、バリデーションで弾きエラーメッセージを表示する機能を実装したいのですがエラーメッセージが表示されません。
発生している問題・エラーメッセージ
createアクションでバリデーションチェック後、画面遷移の後エラーメッセージが表示されない
該当のソースコード
ruby
1/Bookers/app/controllers/books_controller.rb 2 3class BooksController < ApplicationController 4 protect_from_forgery :except => [:create] 5 6 def top 7 end 8 9 def book 10 @books=Book.all 11 @book=Book.new 12 end 13 14 def create 15 book = Book.new(book_params) 16 if book.save 17 flash[:notice]="Book was successfully created" 18 redirect_to books_path 19 else 20 @books=Book.all 21 @book=Book.new(book_params) 22 render "book" 23 end 24 end 25 26 def show 27 @book=Book.find(params[:id]) 28 end 29 30 def edit 31 @book=Book.find(params[:id]) 32 end 33 34 def destroy 35 book = Book.find(params[:id]) 36 book.destroy 37 flash[:notice]="Book was successfully destroyed" 38 redirect_to books_path 39 end 40 41 def update 42 book = Book.find(params[:id]) 43 book.update(book_params) 44 flash[:notice]="Book was successfully updated" 45 redirect_to books_path(book.id) 46 end 47 48 private 49 def book_params 50 params.require(:book).permit(:title, :body) 51 end 52end
ruby
1/Bookers/app/views/books/book.html.erb 2 3 <% if flash[:notice] %> 4 <p class="s-text" id="notice"> 5 <%= flash[:notice] %> 6 </p> 7 <% end %> 8<h1>Booker</h1> 9<h4>投稿一覧</h4> 10<div class ="book-wrap"> 11 12<table> 13 <tr> 14 <th class="title1">title</th> 15 <th class="body1">body</th> 16 </tr> 17</div> 18<%@books.each do |book|%> 19 <div class ="book-wrap"> 20 <tr> 21 <td class="book-title"><%=book.title%></td> 22 <td class="book-body"><%=book.body%></td> 23 <td class="link-menu"><%=link_to "Show",show_books_path(book)%></td> 24 <td class="link-menu"><%=link_to "Edit",edit_books_path(book)%></td> 25 <td class="link-menu"><%=link_to "Destroy",destroy_books_path(book),method: :delete ,data: {confirm: "Are you sure?"}%></td> 26 </tr> 27 </div> 28</table> 29<%end%> 30 31 32 33<h2>New book</h2> 34<%=form_with model:@book,url:"books",local:true do |f|%> 35<p> 36<%= render 'layouts/error_messages', model: f.object%> 37</p> 38 <h4>タイトル</h4> 39 <%= f.text_field :title %> 40 <h4>本文</h4> 41 <%= f.text_area :body %> 42 <%= f.submit '投稿' %> 43<%end%>
ruby
1/Bookers/app/views/layouts/_error_messages.html.erb 2 3<% if model.errors.any? %> 4 <div class="alert alert-warning"> 5 <ul> 6 <% model.errors.full_messages.each do |message| %> 7 <li><%= message %></li> 8 <% end %> 9 </ul> 10 </div> 11<% end %>
ruby
1/Bookers/app/models/book.rb 2 3class Book < ApplicationRecord 4 validates :title,presence: true 5 validates :body,presence: true 6end 7
試したこと
ここのバリデーションチェックの質問を読み、レイアウト部のmodelを@bookに変えて試したりしたのですが上手く行きませんでした。
レコードに登録はされていないのでバリデーションは効いており、createアクションの@book周りが怪しいと思うのですが、そこからいくら調べても分からなくなってしまいました。
長くなってしまいましたがどうかご教授お願い致します。
補足情報(FW/ツールのバージョンなど)
railsのバージョンは5.2.4です。
回答1件
あなたの回答
tips
プレビュー