respond_with ArgumentError(提供Nil位置。无法构建URI。):

时间:2013-02-03 21:44:42

标签: ruby-on-rails

我有一个控制器,响应所有RESTful操作,索引,创建,更新等,使用JSON,

class QuestionsController

 respond_to :json

   def index
     respond_with Question.all
   end

end 

但是,我在控制器中也有其他动作。例如,在一种方法中,它检查响应是否正确,然后尝试返回一个布尔值为true或false的变量

respond_with correct_response  #either true or false

然而,这给了我错误

ArgumentError (Nil location provided. Can't build URI.):

还有其他方法我希望用多个值来回应。在Sinatra,你可以用json做回应

{:word => session[:word], :correct_guess => correct_guess, :incorrect_guesses => session[:incorrect_guesses], :win => win}.to_json

我如何在Rails中做到这一点?

所以,两个问题,写这个的正确方法是什么

respond_with correct_response

以及如何以类似于我在Sinatra应用程序中显示的示例的方式响应多个值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:25)

您需要ActionController::Base#render,而不是respond_with。做你在这里尝试实现的目标的正确方法是:

render json: {word: session[:word], correct_guess: correct_guess, incorrect_guesses: session[:incorrect_guesses], win: win}

答案 1 :(得分:7)

对于这种情况,

respond_with实际上是可以的 - 它恰好为你做了一些魔术,并依赖于访问所需的信息;看看Rails 4.1.9' actionpack/lib/action_controller/metal/responder.rb

在您的情况下,ArgumentError (Nil location provided. Can't build URI.)实际上是在说实话 - 它正在尝试从location标题设置中确定要使用的网址,但无法确定出。如果你给它一个,我打赌你可以让你的代码工作:

class QuestionsController
  respond_to :json

  def index
    respond_with Question.all, location: questions_url
  end
end