像计数一样更新,而无需在Rails中重新加载页面

时间:2019-04-01 20:09:44

标签: ruby-on-rails ajax

我使用的是acts_as_votable gem,并且尝试在不重新加载页面的情况下更新视图页面上的点赞数。我已经尝试了许多指南,并且已经达到页面本身不会重新加载的程度,但是所有帖子都消失了,而是随着更新的计数重新出现。我正试图阻止发布这些信息。 remote.request_ip的目的是无需创建帐户即可进行投票。

视频控制器

def like
  @video.upvote_from current_user
  render layout: false
end

def upvote
  @video = Video.find(params[:id])
  @ip = request.remote_ip
  was_it_upvoted = Ipaddresstracker.find_by(ipaddress: @ip, videoid: @video.id)
  if was_it_upvoted
    @video.downvote_by User.first
    was_it_upvoted.delete
  else
    Ipaddresstracker.create(:ipaddress => @ip, :videoid => @video.id)
    @video.vote_by voter: User.first, :duplicate => true
  end
  redirect_to :back
end

like.js.haml

:plain
  $('#like-count').html("#{@article.get_upvotes.size}");

_index.html.erb

<div class="btn-group">
    <%= link_to like_video_path(x), method: :put, remote: :true, id: "like-count", class: "btn btn-default btn-sm" do %>
        <span class="glyphicon glyphicon-chevron-up"></span>
        Upvote
        <div> <%= x.get_upvotes.size %> </div>
    <% end %>
<div> 

路线

resources :videos do#, only: [:index, :show] do
  member do
    put "like", to: "videos#upvote"
    put "dislike", to: "videos#downvote"
    put "like" => "videos#like"
    put "unlike" => "videos#unlike"
  end
end

1 个答案:

答案 0 :(得分:1)

如果要检测其他用户所做的更改,则必须使用操作电缆或插座,但是如果您只想创建类似操作的调用,则必须添加添加:

respond_to do |f|
  f.js
end

然后在相应的视图文件中为您的动作添加js代码,以更新您喜欢的动作的视觉效果。例如:

 $('#like-count').html("#{@article.get_upvotes.size}");