我正在使用名为
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缓存都会破坏它