21

すべてのRESTfulアクション、インデックス作成、作成、更新などに対して、JSONでresponds_withJSONを実行するコントローラーがあります。

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.):

複数の値で応答したい他の方法もあります。シナトラでは、jsonで応答するためにこれを行うことができます

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

Railsでそれをどのように行うのですか?

だから、2つの質問、これを書くための適切な方法は何ですか

respond_with correct_response

そして、Sinatraアプリから示した例と同様の方法で複数の値を使用してresponse_withする方法。

ご協力いただきありがとうございます。

4

2 に答える 2

28

あなたが欲しいActionController::Base#render、ではなくrespond_with。ここで達成しようとしていることを実行する適切な方法は次のとおりです。

render json: {word: session[:word], correct_guess: correct_guess, incorrect_guesses: session[:incorrect_guesses], win: win}
于 2013-02-03T22:02:14.123 に答える
7

respond_withこのシナリオでは実際には問題ありません。たまたま魔法をかけて、必要な情報にアクセスできるかどうかに依存しています。Rails4.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
于 2015-01-14T05:51:58.480 に答える