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?