我正在使用名为
acts_as_votable的宝石来使我的模型可以投票.
目前一切正常.
但每次有人投票支持帖子时,页面都必须刷新.如何在没有页面刷新的情况下让投票工作.我可以添加一个简单的JavaScript吗?
这是我在控制器中的内容:
def Vote
@post = Post.find(params[:post_id])
@post.liked_by current_user
respond_to do |format|
format.html {redirect_to :back }
end
end
以下是我的看法:
<%= link_to “like post",like_post_path(@post),method: :put %>
解决方法
一个非常简单的版本可能如下所示:
ruby
def Vote
@post = Post.find(params[:post_id])
@post.liked_by current_user
respond_to do |format|
format.html {redirect_to :back }
format.json { render json: { count: @post.liked_count } }
end
end
HTML
<%= link_to 'like',Vote_path(@post),class: 'Vote',remote: true,data: { type: :json } %>
JS
$('.Vote')
.on('ajax:send',function () { $(this).addClass('loading'); })
.on('ajax:complete',function () { $(this).removeClass('loading'); })
.on('ajax:error',function () { $(this).after('<div class="error">There was an issue.</div>'); })
.on('ajax:success',function (data) { $(this).html(data.count); });
这是一个非常基本的版本,显示了基本方法,但它有一些明显的缺陷:
>没有办法“不投票”>“装载”指标不是很好的用户体验;使用JS,我们可以始终显示用户的当前状态,并在后台处理与服务器的同步>视图中的任何HTML缓存都会破坏它