2016-05-14 8 views
1

Jemand könnte mir helfen? Ich versuche, die AJAX zu meinem Projekt zu implementieren und was ich tun sollte, sollte sehr einfach sein, aber für mich wurde ein Wahnsinn Tage rsrs. Mein Idea ist, wenn der Benutzer einen neuen Kommentar hinzufügen sollte erscheinen ohne Seite neu laden, folgen Sie unten meinem Controller, Ansichten und Routen. Ahh, ich habe etwas gelöscht, was funktioniert hat.Ruby on Rails implementieren Ajax Post und Kommentare

hier ist /app/controller/comments_controller.rb

enter image description here

Beitrag app/controller/posts_controller.rb

enter image description here

Ansichten Kommentare/app/views/Kommentare/_template .html

enter image description here

Kommentare

Ansichten /app/views/comments/_form.html.slim

enter image description here

Ansichten Töpfe /app/views/posts/show.html.slim

enter image description here

Lösung Kommentar löschen verwendet

enter image description here

+0

Wie wäre es mit der Verwendung von $ .ajax, senden Sie den Kommentartext an Ihren Controller, validieren Sie ihn, antworten Sie mit "True", wenn er gültig ist. Nach dem Empfang von True, $ (Kommentar-Inhaber) .append (der neue Kommentar) .. Oh, Sie suchen nach der $ .ajax Syntax ?. – venkatKA

+0

I'm versuchen, so etwas wie dieses jQuery -> # ein Kommentar schreiben $ .on "Ajax: beforeSend" ("Kommentar-Form."), (Evt, XHR, Einstellungen) -> $ (this) .find ('textarea') .addClass ('uneditable-input') .attr ('deaktiviert', 'deaktiviert'); .on "ajax: Erfolg", (evt, Daten, Status, xhr) -> $ (this) .find ('textarea') .removeClass ('uneditable-input') .removeAttr ('deaktiviert', "deaktiviert") .val (''); $ (xhr.responseText) .append ($ ("# comments_container")). Show ('langsam') – Edson

+0

Bitte poste deinen Code als Text anstelle eines Schnappschusses? –

Antwort

0
create.js.erb 

$("#comments").html("<%= escape_javascript(render partial: "comments/template", collection: @post.comments, as: :comment) %>"); 

_template.html.erb 
<p class="comment-name"><%= link_to comment.user.name, user_path(comment.user_id)%> 
    <span class="comment-content"><%= comment.content %></span> 
</p> 
<p class="comment-time"><%= time_ago_in_words(comment.created_at) %></p> 

CommentsController 

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.build(comment_params) 
    @comment.save 
    respond_to do |format| 
     format.html { redirect_to :back } 
     format.js 
    end 
end 

Dies ist vielleicht zu einfach, aber vielleicht wird es etwas auslösen.

+0

Nur um klarer zu sein, ich benutze gem 'acts_as_commentable_with_threading', der Kommentar-Controller kann in jedem anderen Modell verwendet werden, und die Lösung, die Sie mir gegeben haben, wird die Art ändern, wie die Dinge funktionieren. Danke. – Edson