我正在一个应用程序上实现一个投票系统,我正在构建的应用程序与 stackoverflow 上的应用程序非常相似。当用户单击 upvote 或 downvote 时,将向我的一个控制器发送一个 ajax 请求,它们会更新几个表。完成后,我使用 respond_to 路由到执行 jquery 以更新用户显示的 js.erb 文件。但是,jquery 没有被执行。当我舔赞成/反对票时,控制器代码正确执行(我可以在 rails 控制台中看到它),但用户显示没有更新。然而,刷新后,用户显示会更新,但不是异步的。我知道 jquery 没有在 fire bug 控制台中执行 b/c 我可以看到我的 jquery 代码 - 它只是没有被应用。这是我的赞成控制器代码:
def upvote
@post = Post.find(params[:id])
@user_vote = current_user.votes.where(post_id: @post.id).first
if @user_vote.blank?
Vote.create(user_id: current_user.id, post_id: @post.id, vote: 1)
@post.upvotes += 1
elsif @user_vote.vote.to_i == 0
@user_vote.vote = 1
@post.upvotes += 1
elsif @user_vote.vote.to_i == 1
return redirect_to :back, :alert => 'You have already upvoted the post'
elsif @user_vote.vote.to_i == 2
@user_vote.vote = 1
@post.downvotes -= 1
@post.upvotes += 1
end
respond_to do |format|
if @post.save and @user_vote.save
format.js { }
else
format.html { redirect_to :back, :alert => 'There was an error in upvoting the post' }
end
end
end
这是我的 upvote.js.erb 文件:
$('#post-action-<%= @post.id %>').html("upvote");
// this normally renders a partial (below), but I am rendering "upvote" until I can fix this
// escape_javascript(<%= render :partial => 'post_voting', :locals => { post: @post, user_vote: @user_vote } %>)
这是我的html:
<div class="post_actions" id='post-action-<%= "#{post.id}" %>' >
<%= render :partial => 'post_voting', :locals => { post: post, user_vote: current_user.votes.where( post_id: post.id ).first } %>
</div>
这是我的萤火虫控制台输出:http: //i.imgur.com/H6zXJ.png
编辑
我注意到我的服务器上出现错误:
Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2012-08-09 06:33:42 -0700
Served asset /bootstrap.js - 304 Not Modified (0ms)