作为可投票的Ajax投票大小不更新Rails
我在我的rails 4 app上使用这些行为作为可投票的gem。
我终于使用ajax工作了,所以当用户投票时页面不会刷新,但是,在刷新页面之前,vote.size不会更新。
这是我的控制器动作:
def upvote @article = Article.find(params[:article_id]) @subarticle = @article.subarticles.find(params[:id]) session[:voting_id] = request.remote_ip voter = Session.find_or_create_by(ip: session[:voting_id]) voter.likes @subarticle respond_to do |format| format.html {redirect_to :back } format.json { render json: { count: @subarticle.get_upvotes.size } } end end
并查看:
$('.vote') .on('ajax:send', function () { $(this).addClass('loading'); }) .on('ajax:complete', function () { $(this).removeClass('loading'); }) .on('ajax:error', function () { $(this).after('There was an issue.'); }) .on('ajax:success', function(e, data, status, xhr) { $(this).html("Thank you for voting!"); });
截至目前,当用户投票时,它完全摆脱了“有用”按钮和upvote大小,并显示html“谢谢投票”。
我无法弄清楚如何保持按钮,只需将upvote.size更新为正确的数字。 我已经尝试将一个类分配给upvote大小,然后使用类似这样的东西: $('.item-class').html(data.count)
但没有运气。
有什么建议? 谢谢!
$('.item-class').html(data.count)
item-class似乎没有在你的模板中声明任何地方…但即使它确实如此,如果你这样称呼它,它可能会匹配页面上的多个东西,所以这个替换将不起作用。
更换按钮的原因是你要替换“this”的html(它被定义为标有类.vote的整个部分)
如果你想只替换.vote部分中的item-class(即保持按钮完好无损),那么你需要a)添加“item-class”类的东西,b)减少你要替换的东西。 例如:
$(this).first('.item-class').html("Thank you for voting!");
(注意我没有对此进行错误测试 – 您可能需要首先使用google javascript来确保这是正确的用法)。
- Rails:在textfield中执行onchange远程函数时如何从另一个字段获取值
- 使用带远程的ajax的Ruby表单:true给出了ActionController :: InvalidAuthenticityToken错误。 经典提交没有
- Rails:不是ember,不是JS响应,而是介于两者之间
- 部分Javascript(Ruby on Rails)
- 如何将params传递给Rails控制器方法然后使用JQuery / AJAX返回值?
- 使用Rails,jquery和best_in_place gem进行就地编辑
- 使用Ruby on Rails的Ajax简单视图刷新
- 指示延迟作业已完成的ajax进程
- 如果没有在Rails 3中重新加载,数据库值不会出现在同一页面中