1. Schlussfolgerung </ b>
2. So löschen Sie die Fehlerbündelung </ b>
3. Wo es stecken bleibt </ b>
Verwenden Sie validiert </ b>, .errors.any </ b> und .errors.full_messages.each </ b>!
Stellen Sie zuerst die Validierung für das Modell ein!
app/models/buy_item
with_options presence: true do
validates :name
validates :date
end
Mit With_options können Sie die Präsenz festlegen: true (Leerzeichen sind nicht zulässig) von do bis end auf einer Seite. In diesem Fall sind die Leerzeichen in der Namens- und Datumsspalte unbrauchbar!
Und in der Steuerung ist es wie folgt.
controllers/buy_items_controller.rb
def create
@buy_item = BuyItem.new(buy_item_params)
if @buy_item.save
redirect_to root_path
else
render :new
end
end
Wenn es gespeichert ist, wird es zur obersten Seite verschoben. Wenn etwas nicht stimmt und nicht gespeichert wird, springt das Rendern zur neuen Ansicht. Weil ich folgendes machen möchte.
views/buy_items/new.html.erb
<%= render 'public/error_messages', model: f.object %>
Wenn Sie auf diese Weise zur neuen Ansicht von buy_items (render: new) springen, werden Sie zu dem Programm weitergeleitet, für das die Fehleranzeige festgelegt ist. f.object ist | f | von @buy_item in form_wtih gesetzt und der Inhalt von @buy_item wird entfernt!
Der Inhalt (Fehlersätze) von'public / error_messages 'lautet wie folgt.
view/public/_error_messages
<% if model.errors.any? %>
<div class="error">
<ul>
<% model.errors.full_messages.each do |message| %>
<li class='error-message'><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
Ich verwende model, weil ich zusätzlich zum Modell buy_item einen Benutzer verwende. Sie können Validierungsfehlerinhalte auf alle Modelle anwenden. Zusätzlich wird jeder Fehlerinhalt von jeder Methode extrahiert und von <% = message%> angezeigt!
Die URL unten hat mir sehr geholfen!
Referenz-URL: Ausstellen einer Rails-Fehlermeldung Validierungsfehler
Ich habe das Modell in @user oder @buy_item geändert und ein Problem erhalten, weil der @ user-Fehler nicht aufgetreten ist oder die NameErrormethod aufgetreten ist. Darüber hinaus wurde f.object ohne Berechtigung in eine Instanzvariable umgewandelt, was einen zusätzlichen Fehler verursachte. Wenn Sie zwei Controller haben und diese mit dem Index des angegebenen Controllers anzeigen möchten, können Sie auch "Controller-Name / Aktionsname" rendern. Da es jedoch nur angezeigt wird, war es ein blinder Punkt, dass ich die darin enthaltenen Daten beschreiben musste.
Recommended Posts