У меня есть проект Ruby on Rails с моделью User
и моделью Content
, среди прочих. Я хотел, чтобы пользователь мог "понравиться" контенту, и я сделал это с помощью acts_as_votable gem.
В настоящий момент система симпатий работает, но я обновляю страницу каждый раз, когда нажата кнопка like (link_to).
Я хотел бы сделать это с помощью Ajax, чтобы обновить кнопку и счетчик понравившихся посетителей без необходимости обновлять страницу.
В моем представлении Content -> Show
это то, что у меня есть:
<% 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>
Контроллер Content
делает это, чтобы нравится/не нравится:
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
И в моем файле routes.rb это то, что у меня есть:
resources :contents do
member do
put "like", to: "contents#like"
put "dislike", to: "contents#dislike"
end
end
Как я уже сказал, система симпатий работает нормально, но не обновляет счетчик симполей и т.п. как только пользователь нажимает на него. Вместо этого, чтобы обмануть это, я вызываю redirect_to @content
в действие контроллера.
Как я мог реализовать это с помощью простого вызова Ajax? Есть ли другой способ сделать это?