Nested-Modell-Validierung - Fehler nicht anzeigen
Gab es viele Fragen zu diesem Thema, aber keiner von Ihnen scheinen zu helfen. Und ja, ich habe gesehen, wie diese Schienen cast.
Habe ich ein Autor, der viele Bücher, etwa so:
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
Buch:
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
Ich habe das folgende Formular aus, um ein Buch hinzuzufügen, die dem Autor im Autoren#show:
<%= 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 %>
...mit folgenden authors_controller Methode:
def show
@author = Author.find(params[:id])
@book = @author.books.build
end
...und die folgenden books_controller Methode:
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
Ich kann nicht scheinen, um herauszufinden, warum das Formular zeigt keine Fehlermeldungen. Ich folgte dem Beispiel von railscasts, wenn Sie sagen, es sollte eine Instanz-variable von Büchern in der form statt @Autor.Bücher.bauen, so habe ich letztere in der Steuerung und @Buch in der form - noch ohne Erfolg.
Vielen Dank für jede Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie uns Schritt für Schritt durch es.
Senden Sie das schaffen, und, die in Ihrem create-Aktion
(Seite beachten Sie, was passiert, wenn @Autor nicht gefunden. Sie sind nicht Umgang mit diesem Fall.)
Nun, der Autor ist gefunden, aber @Autor.Bücher.erstellen schlägt fehl (liefert false), so machen Sie die show-action.
Diese nutzt die Vorlage zeigen, aber nicht den Aufruf der show-action-code. (Randbemerkung, vielleicht ist die neue Seite wäre eine bessere Wahl, so kann der Benutzer versuchen, erstellen Sie es erneut.)
An dieser Stelle @Autor instanziiert wird, mit der der Autor Sie gefunden, aber nicht @book. Also, @Buch, wenn gerufen wird null.
Ihre Karte Vorlage macht
die nicht wahr werden, so dass der rest der Vorlage innerhalb der wenn, werden übersprungen. Das ist, warum gibt es keine Fehler.
Brauchen Sie nicht eine form_for, um Fehlermeldungen anzuzeigen. Schalten Sie mithilfe der neuen Vorlage, dann gibt es ein Formular, um erneut zu versuchen.
Also wechseln wir auf die Wiedergabe neu.
Ihre neue Vorlage wird
In Büchern controller
/books_controller.rb
Wenn Autor ist nicht vorhanden redirect Autoren-index-Seite mit Fehlermeldung dont render die neue form, wie Sie werden nicht in der Lage zu bauen die Bücher bilden als Autor ist null.
Und in Ihren Büchern neue form, die Sie haben können, die Fehler aufgeführt, die für Bücher
/Bücher/neue.html-Code.erb