我有一个 Ruby on Rails 项目,其中包含一个模型User
和一个模型Content
等。我想让用户“喜欢”一个内容成为可能,我已经使用acts_as_votable gem 做到了这一点。
目前,点赞系统正在运行,但每次按下点赞按钮 (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 调用来实现这一点?还有另一种方法吗?