Qual è il modo preferito per visualizzare i messaggi di errore di convalida utilizzando form_for
in Rails 4?form_for messaggi di errore in Ruby on Rails
<%= form_for @post do |f| %>
...
<% end %>
Qual è il modo preferito per visualizzare i messaggi di errore di convalida utilizzando form_for
in Rails 4?form_for messaggi di errore in Ruby on Rails
<%= form_for @post do |f| %>
...
<% end %>
Uguale a Rails 3 - vedi f.error_messages in Rails 3.0 o http://railscasts.com/episodes/211-validations-in-rails-3 per molte diverse possibilità.
La mia preferenza personale è usare simple_form e far sì che metta l'errore vicino all'ingresso.
Questo è quanto ho loro sono la visualizzazione per il mio oggetto form chiamato @location:
<% if @location.errors.any? %>
<ul>
<% @location.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
Nota: mettere il codice di cui sopra dopo la linea <%= form_for @location do |f| %>
Il mio modo preferito di fare questo e mantenere il codice semplice e DRY, è il seguente:
Creare un nuovo aiutante all'interno di application_helper.rb
# Displays object errors
def form_errors_for(object=nil)
render('shared/form_errors', object: object) unless object.blank?
end
creare una nuova condivisa parziale condiviso/_form_errors.html.erb
<% content_for :form_errors do %>
<p>
<%= pluralize(object.errors.count, "error") %> prevented the form from being saved:
</p>
<ul>
<% object.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
Modificare il file application.html.erb per includere gli errori dove vuoi:
<%= yield :form_errors %>
Infine, posizionare l'helper all'inizio di ogni modulo:
<%= form_for(@model) do |f| %>
<%= form_errors_for @model %>
<%# ... form fields ... %>
<% end %>
Questo lo rende estremamente estremamente semplice da gestire e mostrare gli errori del modulo in molte forme.
La ringrazio molto! In Rails 4.x è molto importante creare una cartella chiamata "shared" in modo che il partial possa essere chiamato correttamente, altrimenti si otterrebbe un errore di ActionView :: MissingTemplate. –
Nell'esempio sopra, <% = yield: form_errors%> sostituisce lo standard <%= yield %> o è in aggiunta a? Cosa aggiunge: form_errors per produrre do contro il rendimento standard? – user2012677
No, non lo sostituisce. La resa standard ha un uso completamente diverso in quanto rende la visualizzazione nel layout. –
So che questo non è esattamente quello che è stato chiesto, ma se si utilizza la gemma simple_form, che raccomando, è possibile utilizzare f.error_notification che accetta: messaggio come opzione.
= f.error_notification message: form_errors_for(your_object)
Io uso un metodo molto simile alla risposta di Wes; form_errors_for all'interno application_helper.rb
def form_errors_for_base(object)
if object.errors.messages[:base].present?
object.errors.messages[:base].join(",\n") + "."
else
nil
end
end
@kdbanman Immagino che tu sia un po 'distratto? Haha! –
http://stackoverflow.com/questions/3873190/f-error-messages-in-rails-3-0#answer-13246663 –