2016-04-19 6 views
2

Ich arbeite an einem Formular, und ich habe ein Problem mit den Formulareinreichungen. Wenn ein Benutzer einen der Einträge durcheinanderbringt oder überspringt, werden alle Fehlermeldungen oben auf der Seite gerendert. Ich frage mich, ob ich sie stattdessen neben jeder Einreichung rendern lassen kann?Einfache Formularfehlermeldungen, die neben der Formularübergabe in Ruby on Rails angezeigt werden

Mein Controller sieht aus wie

def new 
@form_submission ||= FormSubmission.new 
end 

def create 
@form_submission = FormSubmission.new(form_submission_params) 

if @form_submission.save 
    redirect_to thank_you_path 
else 
    render :new 
end 
end 

Mit meiner Ansicht nach aussehen wie

.field 
    = f.label :first_name, required: false, class: "font required-field" 
= f.text_field :first_name, :required => "", class: "stretch test" 

und meine CSS

.font{ 
vertical-align: text-bottom; 
font-size: 15px; 
font-weight: bold; 
font-family: "Helvetica Neue"; 
height: 15px; 
} 

.required-field::before{ 
content: ' *'; 
float: right; 
color: red; 
padding-left: 5px; 
} 

.test:valid{ 
    border: 1px solid #00aeef; 
} 

.test:invalid{ 
    border: 1px solid red; 
} 

Antwort

6

Jedes Modell ein Fehler haben wird definiert Hash, der aus von Fehlern für jedes der Attribute des Modells. Sie können in Ihrer Ansicht so etwas wie @form_submission.errors.full_messages_for(:first_name) tun, um auf die Fehler nur für ein Attribut zuzugreifen, in diesem Fall auf die Fehler des first_name Attributs des Modells @form_submission.

erstelle ich für Formfehler der Regel eine teilweise, dass es für jedes Feld in der Form

<%= render partial: 'shared/form_error', locals: {errors: @form_submission.errors.full_messages_for(:body)} %> 
+0

Ich denke, dass ist eine wunderbare Lösung so etwas wie dieses

<% unless errors.nil? %> <div class="error-explanation"> <ul class="list-unstyled"> <% errors.each do |error| %> <li><%= error %></li> <% end %> </ul> </div> <% end %> 

Und dann zugreifen sieht !, Ich finde jedoch immer wieder eine Fehlermeldung, die unter 'undefined method 'errors' für nil: NilClass' steht. – kdweber89

+0

Sie sollten' @ form_submission' als Ihren lokalen anstelle von '@ post' @ kdweber89 verwenden. –

+0

Ja, ich habe @post als Beispiel verwendet, aber ich werde aktualisieren, damit es für Ihre Konfiguration gilt. – Justin