Ошибка формы Ruby on Rails не дает никакого вывода / не работает
Привет, ребята, я везде искал, как выводить ошибки формы, но безуспешно. Я перепробовал почти весь код, который нашел в Интернете, но все равно не работал.
Вот некоторые из моих файлов:
просмотр / books / new.html.erb
<div class="container">
<h2>Create a new book</h2>
<%= form_with model: @book, url: create_new_book_path do |f| %>
<% if @book.errors.any? %>
<ul>
<% @book.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
<div class="form-group row">
<%= label_tag(:title, "Title:", class: "col-sm-2 col-form-label") %>
<div class="col-sm-10">
<%= f.text_field :title, class: "form-control" %>
</div>
</div>
<div class="form-group row">
<%= label_tag(:price, "Price:", class: "col-sm-2 col-form-label") %>
<div class="col-sm-10">
<%= f.text_field :price, class: "form-control" %>
</div>
</div>
<div class="form-group row">
<%= label_tag(:subject_id, "Subject:", class: "col-sm-2 col-form-label") %>
<div class="col-sm-10">
<%= f.collection_select :subject_id, @subjects, :id, :name, class: "form-control" %>
</div>
</div>
<div class="form-group row">
<%= label_tag(:description, "Book description:", class: "col-sm-2 col-form-label") %>
<div class="col-sm-10">
<%= f.text_area :description, class: "form-control" %>
</div>
</div>
<%= submit_tag "Create book", class: "btn btn-success" %>
<%= link_to "Cancel", books_path, class: "btn btn-danger" %>
<% end %>
<br/>
</div>
books_controller.rb
class BooksController < ApplicationController
def index
@books = Book.all
end
def show
@book = Book.find(params[:id])
end
def new
@book = Book.new
@subjects = Subject.all
end
def create
@book = Book.new(book_params)
end
def book_params
params.require(:book).permit(:title, :price, :subject_id, :description)
end
def edit
@book = Book.find(params[:id])
@subjects = Subject.all
end
def update
@book = Book.find(params[:id])
if @book.update_attributes(book_params)
redirect_to action: "index"
else
@subjects = Subject.all
render action: "edit"
end
end
def destroy
Book.find(params[:id]).destroy
redirect_to action: "index"
end
end
routes.rb
get 'books/new', to: 'books#new', as: 'new_book'
post 'books/create', to: 'books#create', as: 'create_new_book'
просмотр / макеты /application.html.erb
<main role="main">
<%= yield %>
</main>
Я действительно не знаю, что мне не хватает, чтобы получить ошибки, благодарен за ваши ответы!!
1 ответ
Решение
Попробуйте поместить их во вспышку, как это, и отобразить в вашем представлении
def create
@book = Book.new
if @book.update(book_params)
flash[:notice] = 'success'
redirect_to action: 'index'
else
flash[:alert] = @book.errors.full_messages.join(', ')
redirect_to action: 'index'
end
end
и, на ваш взгляд, эти вспышки выглядят как
<% if flash[:notice]%>
<span class='notice'><%= flash[:notice] %></span>
<% end %>
<% if flash[:alert]%>
<span class='alert'><%= flash[:alert] %></span>
<% end %>