【问题标题】:Updating like count without the page reloading in Rails在 Rails 中更新类似计数而不重新加载页面
【发布时间】:2019-04-01 20:09:43
【问题描述】:

我正在使用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

【问题讨论】:

  • 为什么在你的控制器中使用这种upvote方法?它看起来像验证,你应该在模型中进行。

标签: ruby-on-rails ajax


【解决方案1】:

如果您想检测其他用户所做的更改,那么您必须使用动作电缆或插座,但如果您只想创建 post call to like action 那么您必须添加 add:

respond_to do |f|
  f.js
end

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

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

【讨论】:

  • 嗯,没用,但谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
相关资源
最近更新 更多