私が構築しているアプリに賛成投票システムを実装しています。これは、stackoverflowでのシステムと非常によく似ています。ユーザーが賛成票または反対票をクリックすると、ajaxリクエストが私のコントローラーの1つに送信され、いくつかのテーブルが更新されます。それが完了したら、respond_toを使用して、jqueryを実行してユーザー表示を更新するjs.erbファイルにルーティングします。ただし、jqueryは実行されていません。賛成/反対をなめると、コントローラーコードは正しく実行されますが(レールコンソールで確認できます)、ユーザー表示は更新されません。更新すると、ユーザー表示は更新されますが、非同期ではありません。jqueryがファイアバグコンソールで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>
これが私のfirebugコンソールの出力です: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)