我正在尝试使用Rails 4进行一个非常简单的ajax调用,但是没有正确检索json响应。
这是脚本:
$(document).on "submit", "form[name=upvote-form]", ->
form = $(this)
$.post "/vote", $(this).serialize(), (data) ->
if data["status"] is true
form.find("input").addClass "disabled"
$("#vote-count-".concat(form.find("#question_id").attr("value"))).html data["votes"]
else
return
return
alert(data['votes'])
是undefined
,这让我试图找出问题所在。
然后在控制台中我可以看到:
ArgumentError (Nil location provided. Can't build URI.):
app/controllers/vote_controller.rb:8:in `vote'
以下是解决问题的方法:
class VoteController < ApplicationController
def vote
question_id = params[:question][:id]
user_id = current_user.id
vote = Vote.where(["question_id = :q", { q: question_id }]).where(["user_id = :u", { u: user_id }]).take
respond_to do |format|
if vote.nil?
@vote = Vote.new
@vote.question = Question.find question_id
@vote.user = User.find user_id
@vote.save
votes = Vote.where(["question_id = :q", { q: question_id }]).count
format.json { render :json => { status: true, votes: votes } }
else
format.json { render :json => { status: false } }
end
end
end
end
任何出错的线索?我该怎么办?
答案 0 :(得分:1)
respond_with旨在与资源一起使用。实施例
def show
@vote = Vote.find params[:id]
respond_with(@vote)
end
在您的情况下,您需要使用respond_to
方法
def vote
# stuff
respond_to do |format|
if vote.nil?
# stuff
format.json { render json: { status: true, votes: votes } }
else
# other stuff
end
end
end