Reputation: 9512
I am trying to make a very simple ajax call with Rails 4, but the json response is not being retrieved properly.
Here's the script:
$(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'])
is undefined
, which made me try to find what was going wrong.
Then in the console I could see this:
ArgumentError (Nil location provided. Can't build URI.):
app/controllers/vote_controller.rb:8:in `vote'
And here's the method with the problem:
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
Any clue of what's going wrong? And what can I do?
Upvotes: 0
Views: 50
Reputation: 11570
respond_with is meant to be used with a resource. Example
def show
@vote = Vote.find params[:id]
respond_with(@vote)
end
In your case, you need to use the respond_to
method
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
Upvotes: 1