2016-07-22 9 views
0

Ich habe ein Bug Show/Edit-Formular, das Teilzeichen enthält, um Kommentare und Anhang hinzuzufügen.Render-Validierung Fehlermeldungen auf der Seite für Teilformulare

Wenn ein Benutzer versucht, ungültige Anlagenart oder einen leeren Kommentar zu senden, die Validierung würde einen Fehler wirft [validates :comment, presence: true] und ähnlich für die Befestigung [using paperclip gem], jetzt, wenn dies geschieht, ich die Fehlermeldungen will auf dem gleichen Fehler angezeigt werden bilden.

Das Repo ist bei @GitHub Link

In meiner Show Form I

show.html.erb 
<%= render partial: 'bug_attachments/bug_form' %> 
<%= render partial: 'comments/form' %> 

comments/form.html.erb 
<% @comment = Comment.new %> 
<%= form_for [@bug, @comment] do |f| %> 
<%= f.text_area :body, placeholder: "Add a comment" %> 
<%= f.submit 'Add Comment'%> 
<% end %> 


comments_controller.rb 
class Bugs::CommentsController < ApplicationController 
before_action :authenticate_user! 
before_action :set_bug 

def create 
    @comment = @bug.comments.new comment_params 
    @comment.user = current_user 
    if @comment.save 
    redirect_to bug_path(@comment.bug_id), notice: 'Comment added successfully' 
    else 
    # Here I am setting @bug = 1 since when the user posts the comments, the @bug becomes nil. 
    @bug = Bug.find(1) 
    render 'bugs/show' 
    # redirect_to @comment, alert: 'Unable to save your comment' 
    end 
end 
private 
    def set_bug 
    @bug = Bug.find(params[:bug_id]) 
    end 
    def comment_params 
    params.require(:comment).permit(:body) 
end 
end 

Jede Hilfe hier bitte?

+0

erreichen Sie dies, indem Sie Ajax zu Ihrem Formular hinzufügen. 'remote: true' – mrvncaragay

+0

@ Marv-C - können Sie pls erzählen, wie dies erreicht werden kann? – HSD

Antwort

0

Sie können es wie so tun (für Ihr Projekt bearbeitet):

<% if @comment && @comment.errors.any? %> 
    <ul> 
    <% @comment.errors.full_messages.each do |error_message| %> 
    <li><%= error_message %></li> 
    <% end %> 
    </ul> 
<% end %> 

Eine weitere interessante Art und Weise in einem Flash-es ist zu tun:

auf dem Controller:

if @comment.errors.any? 
    flash[:error] = @comment.full_messages.join(', ') 
    redirect_to #somewhere 
else 
+0

danke, das 'flash [: errors]' Ding funktioniert gut. über die '@ comment.errorys.any' habe ich versucht, aber während dies tun wird @comment wird Null und nicht die Fehlermeldungen, nicht sicher, warum? mein Verständnis ist mit Redirect die vorherigen Fehler bestehen nicht weiter mit Redirect und ist eine neue Anfrage. – HSD

+0

Haben Sie in Ihrem Modell Validierungen angegeben? – Alex

+0

Ja haben die Validierungen in Modell – HSD

Verwandte Themen