Wie Button Ajax in Ruby on Rails

Ich habe ein Ruby on Rails-Projekt mit einem ModellUser und ein ModellContent, unter anderen. Ich wollte es einem Benutzer ermöglichen, einen Inhalt zu "mögen", und das habe ich mit dem getandoes_as_votable Juwel.

Im Moment funktioniert das Liking-System, aber ich aktualisiere die Seite jedes Mal, wenn der Like-Button (link_to) gedrückt wird.

Ich möchte dies mit Ajax tun, um die Schaltfläche und den Likes-Zähler zu aktualisieren, ohne die Seite aktualisieren zu müssen.

In meinemContent -> Show Ansicht, das ist, was ich habe:

<% if user_signed_in? %>
  <% if current_user.liked? @content %>
      <%= link_to "Dislike", dislike_content_path(@content), class: 'vote', method: :put %>
  <% else %>
      <%= link_to "Like", like_content_path(@content), class: 'vote', method: :put %>
  <% end %>
  <span> · </span>
<% end %>

<%= @content.get_likes.size %> users like this
<br>

DasContent Controller tut dies, um zu mögen / nicht mögen:

def like
    @content = Content.find(params[:id])
    @content.liked_by current_user
    redirect_to @content
end

def dislike
    @content = Content.find(params[:id])
    @content.disliked_by current_user
    redirect_to @content
end

Und in meiner routes.rb-Datei habe ich Folgendes:

resources :contents do
    member do
        put "like", to: "contents#like"
        put "dislike", to: "contents#dislike"
    end
end

Wie gesagt, das Liking-System funktioniert einwandfrei, aktualisiert jedoch weder den Liking-Zähler noch den Like-Button, nachdem ein Benutzer darauf geklickt hat. Stattdessen rufe ich an, um das auszutricksenredirect_to @content in der Controller-Aktion.

Wie könnte ich dies mit einem einfachen Ajax-Aufruf implementieren? Gibt es eine andere Möglichkeit?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage