Było wiele pytań na ten temat, ale żadna z nich nie wydaje się pomóc. I tak, obejrzałem this rails cast.Weryfikacja modelu zagnieżdżonego - błędy nie są wyświetlane
Mam autora, który ma wiele książek, tak jak poniżej:
Autor:
class Author < ActiveRecord::Base
attr_accessible :name
has_many :books, dependent: :destroy
accepts_nested_attributes_for :books, allow_destroy: true
validates :name, presence: true
validates :name, length: { minimum: 3 }
end
Book:
class Book < ActiveRecord::Base
attr_accessible :name, :year
belongs_to :author
validates :name, :year, presence: true
validates :year, numericality: { only_integer: true, less_than_or_equal_to: Time.now.year }
end
stworzyłem poniższy formularz aby dodać książkę do autora w autorach # pokaż:
<%= form_for([@author, @book], html: { class: "well" }) do |f| %>
<% if @book.errors.any? %>
<div class="alert alert-block">
<ul>
<% @author.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
#labels and buttons...
<% end %>
... z następującą metodą authors_controller:
def show
@author = Author.find(params[:id])
@book = @author.books.build
end
... i następujący sposób books_controller:
def create
@author = Author.find(params[:author_id])
if @author.books.create(params[:book])
redirect_to author_path(@author)
else
render action: :show
end
end
ja nie potrafię zrozumieć, dlaczego forma nie wyświetla żadnych komunikatów o błędach. Śledziłem przykład z railscastów, gdzie mówią, że powinna istnieć zmienna instancji książek w formie zamiast @ author.books.build, więc umieszczam tę ostatnią w kontrolerze i @book w formularzu - nadal bez skutku.
Dzięki za pomoc!
Dziękuję za szczegółową odpowiedź już! Nie mam nowej metody w kontrolerach książek - formularz nowej książki jest wyświetlany po wyświetleniu autora. Ponadto, gdy zmienię metodę książki # create zgodnie z sugestią, pojawia się błąd routingu, który mówi, że nie może znaleźć metody edycji. Co muszę zrobić inaczej, aby to naprawić? – weltschmerz
Zapomniałem zmienić przekierowanie na: nowe. Standardowy projekt RESTful (niekoniecznie najlepszy projekt) jest taki, jak opisałem, gdzie pojawiłaby się nowa strona książek. Jeśli chcesz, aby działało inaczej, spróbuj zrozumieć, co się dzieje, i napraw to tak, jak chcesz. –