我有一个控制器响应所有RESTful操作,索引,创建,更新等的JSON,
class QuestionsController
respond_to :json
def index
respond_with Question.all
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我在控制器中也有其他操作.例如,在一种方法中,它检查响应是否正确,然后尝试返回布尔值为true或false的变量
respond_with correct_response #either true or false
Run Code Online (Sandbox Code Playgroud)
但是,这给了我错误
ArgumentError (Nil location provided. Can't build URI.):
Run Code Online (Sandbox Code Playgroud)
还有其他方法我希望用多个值来回应.在Sinatra,你可以这样做以回应json
{:word => session[:word], :correct_guess => correct_guess, :incorrect_guesses => session[:incorrect_guesses], :win => win}.to_json
Run Code Online (Sandbox Code Playgroud)
我如何在Rails中做到这一点?
那么,有两个问题,写这个的正确方法是什么
respond_with correct_response
Run Code Online (Sandbox Code Playgroud)
以及如何以类似于我从Sinatra应用程序中显示的示例的方式响应多个值.
谢谢你的帮助.
Chr*_*ell 25
你想要的ActionController::Base#render不是respond_with.做你想要达到的目标的正确方法是:
render json: {word: session[:word], correct_guess: correct_guess, incorrect_guesses: session[:incorrect_guesses], win: win}
Run Code Online (Sandbox Code Playgroud)
respond_with对于这种情况实际上是可以的 - 它恰好为你做了一些魔术,并依赖于访问所需的信息; 看看Rails 4.1.9的actionpack/lib/action_controller/metal/responder.rb.
在你的情况下,ArgumentError (Nil location provided. Can't build URI.)实际上是在说实话 - 它试图从location标题设置中确定要使用的URL 但是无法弄明白.如果你给它一个,我打赌你可以让你的代码工作:
class QuestionsController
respond_to :json
def index
respond_with Question.all, location: questions_url
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11199 次 |
| 最近记录: |