json数据没有在Rails中传递

时间:2014-11-19 18:59:08

标签: javascript ruby-on-rails ajax json ruby-on-rails-4

我正在尝试使用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

任何出错的线索?我该怎么办?

1 个答案:

答案 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