Подтвердить что ты не робот

Response_with ArgumentError (предоставлено расположение Nil. Не удается создать URI.):

У меня есть контроллер, который отвечает с JSON для всех действий RESTful, индексирования, создания, обновления и т.д.,

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.

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Вы хотите ActionController::Base#render, а не respond_with. Правильный способ сделать то, что вы пытаетесь достичь здесь:

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

Ответ 2

respond_with на самом деле нормально для этого сценария - для вас просто происходит какая-то магия и полагается на доступ к информации, которая ему нужна; взгляните на Rails 4.1.9 actionpack/lib/action_controller/metal/responder.rb.

В вашем случае ArgumentError (Nil location provided. Can't build URI.) на самом деле говорит правду - он пытается определить URL-адрес для использования с настройкой заголовка location, но не может понять это. Я бы поставил пари, что вы можете заставить свой код работать, если вы его дали:

class QuestionsController
  respond_to :json

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