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