2016-06-28 6 views
0

Ich habe diese Steuerung, die durch eine Form Controller zu einem Ajax-Aufruf gemacht reagiert:Rails-Rendering nicht Ajax-Antwort, wenn ich ein link_to hinzufügen

if @invite.save 
    respond_to do |format| 
     format.html do 
     flash[:success] = "Friend invited with success" 
     redirect_to event 
     end 
     format.js 
    end 
else 
    flash[:danger] = "Failed to create invite" 
    redirect_to request.referer || events_path 
end 

Form:

<%= form_for(:invite, url: invites_path, method: 'post', html: {class: "form-inline"}, remote: true) do |f| %> 
    <%= f.hidden_field :event_id, :value => event_id %> 
    <div class="form-group"> 
    <%= f.label :email, "Email:" %> 
    <%= f.text_field :email, class: "form-control" %> 
    </div> 
    <div class="form-group"> 
    <%= f.submit "Invite", class: "btn btn-primary" %> 
    </div> 
<% end %> 

und die Antwort :

$("#invites").append("<li> <%= @invite.attendee.email %> - Pending - <%= link_to 'Confirm your presence', confirmation_path(@invite), method: 'post'%> </li>"); 

Diese Antwort funktioniert nicht, jedes Mal, wenn ich auf Senden Schaltfläche nichts klicke passiert und wenn ich Schienen oder Chrom-Konsole betrachte gibt es keine Fehlermeldung. Aber ich habe versucht, das link_to-Tag zu entfernen, und fing an, gut zu funktionieren. Wie bekomme ich die Antwort zur Arbeit mit link_to?

+0

Überprüfen Sie Ihre Serverprotokolle. Gibt es da Fehler? –

+0

Es gibt keine Fehler auf dem Server oder in der Chrome-Konsole, Petr. –

Antwort

0

Was wahrscheinlich passiert ist, gibt es einen Fehler beim Aufruf @invite.save, aber Sie haben keine Fehlerbehandlung, um zu sehen, was schief gelaufen ist. Um das Debuggen zu erleichtern, ändern Sie diese Zeile in @invite.save!, damit Sie eine Ausnahme erhalten, wenn ein Fehler auftritt, und Sie sollten Details in Ihrer Protokolldatei sehen.

Ein weiterer Trick, der Ihnen beim Debuggen einer Ajax-Antwort hilft, ist das Entfernen aller JQuery- und ERB-Codes, um sicherzustellen, dass Ihre Antwort auch gerendert wird. Ändern Sie Ihre Antwort js.erb einfach sein:

console.log('successful response'); 

diese 2 Dinge versuchen, und wenn Sie nichts in Ihrem Log-Dateien und keine „erfolgreiche Antwort“ in der Chromkonsole haben, lassen Sie mich wissen und wir können andere versuchen, Dinge.