railsで以下のような本の感想を投稿するアプリケーションを作っています。(図は投稿フォームのみ抜粋)
新規投稿する際データの有無でバリデーションをし、図のようなエラーメッセージを表示したいです。
しかし、バリデーションの設定に問題があるのかnewメソッドの後に行っているからなのか空の投稿フォームを送るとエラーメッセージの表示がなく次のようなrailsのエラーが出るだけに留まります。createのnewメソッドを消すだけでは投稿自体出来なくなってしまうので困っています。
ActionController::UrlGenerationError in BooksController#create
No route matches {:action=>"show", :controller=>"books", :id=>nil}, missing required keys: [:id]
Extracted source (around line #13):
11
12
13
14
15
16
book = Book.new(book_params) book.save redirect_to book_path(book.id)
end
def index
個人的にはコントローラの記述が上手くいっていないのではないかと思うのですが、適切にバリデーションを行うにはどうしたら良いでしょうか…ご意見お待ちしております。
////book.rb class Book < ApplicationRecord validates :title, presence:true validates :body, presence:true end
////books_controller.rb class BooksController < ApplicationController def top end def new @book = Book.new book = Book.new(book_params) end def create book = Book.new(book_params) book.save redirect_to book_path(book.id) end def index @books = Book.all @book = Book.new end : :
////index.html.erb <h3>New book</h3> <!-- form_for部分 --> <%= form_for(@book) do |f| %> <% if @book.errors.any? %> <p>error!Fill the blank!</p> <% end %> <h4>Title</h4> <%= f.text_field :title %> <h4>Body</h4> <%= f.text_area :body %> <br><%= f.submit 'Create Book' %></br> <% end %>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/27 07:47