Rails投票Ajax(acts_as_votable)

时间:2015-12-27 21:28:12

标签: jquery ruby-on-rails ajax

我目前正在进行一个项目。我正在为类似的系统使用acts_as_votable gem。而不是按钮我正在使用glypicons。一切正常,但问题是当我点击时,每个帖子都被喜欢,但我只希望所选的帖子被喜欢。

在post_controller中:

def upvote
    @post = Post.find(params[:id])
    @post.upvote_from current_user
    respond_to do |format|
        format.html { redirect_to :back }
        format.js
     end
end

在index.html.erb中:

<div class='votee'>        
            <%= render partial: 'vote', locals: {:@post => post}%>
        </div> 

在Partial _vote.html.erb中我有

<small class="likecount-<%= @post.id %>"><%= pluralize(@post.get_upvotes.size, 'like', 'like\'s' )%>&nbsp;</small>
<% if current_user.voted_up_on? @post %>
<%= link_to like_post_path(@post), class: "like", method: :put, remote: true do%>
    <i class="fa fa-heart fa-lg"  style="color:#900603;"></i>&nbsp;
<% end -%> 
                     

在upvote.js.erb

$('.votee').html('<%= j render partial: 'vote'%>');
$('.likecount-<%= @post.id %>').html('<%= j pluralize(@post.get_upvotes.size, 'like', 'like\'s' )%>');

路线工作正常。 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为错误必须与......有关...

<%= render partial: 'vote', locals: {post: post} %>

......应该是......

@post

-

部分应该摆脱post并改为<small class="likecount-<%= post.id %>"><%= pluralize(post.get_upvotes.size, 'like', 'like\'s' )%>&nbsp;</small> <% if current_user.voted_up_on? post %> <%= link_to like_post_path(post), class: "like", method: :put, remote: true do%> <i class="fa fa-heart fa-lg" style="color:#900603;"></i>&nbsp; <% end -%> <% end -%>

$('.votee#<%= post.id %>').html('<%= j render "vote", locals: { post: @post } %>');
// other line is okay

-

你的JS应该如下:

index

您还应该最好更新id方法,向votee div添加<div class='votee' id="<%= post.id %>"> ... </div>

from django.core.management import call_command
call_command('flush', '--noinput')

问题可能是JS正在更新所有帖子;实际数据库可能只会针对单个帖子进行更新。