我是Ruby的新手,正在尝试构建一个API。
我遵循了一个教程,并且能够在调用API端点时返回JSON响应。
在本例中,调用的函数引发了一个错误,我想将其作为JSON响应传递。
my_controller.rb
class MyController < ApplicationController
def getTracklist
begin
importer = #this raises an error
rescue StandardError => e
@response = {
error: e.message,
}
return @response
end
end
end
我的看法是这样的:
getTracklist.json.jbuilder
json.response @response
问题是
这是有效的,但我的反应是
{"response":{"error":"the error message"}}
而我想要它作为
{"error":"the error message"}
我尝试将我的观点改为
json @response
但它失败了:
ActionView::Template::Error(的未定义方法"json"<#:0x0000559304675470>你是说?JSON(:1:json@响应
那么,我如何在不必将响应放入属性的情况下"完全"呈现响应呢
当我读到关于ROR的东西时,我也看到了这个代码有时会被使用,我想知道在这种情况下如何使用它:
render json: { error_code:'not_found', error: e.message }, status: :not_found
谢谢!
有多种方法可以实现您想要的。您可以将响应merge!
放入jbuilder根目录中。
json.merge! @response
以上操作将所有键/值对合并到jbuilder根目录中。您也可以选择extract!
特定的属性。
json.extract! @response, :error
或者,您可以简单地在控制器中渲染它,因为您已经组成了结构,以下内容就足够了。
render json: @response
您可以为jBuilder:执行此操作
json.merge!(@response)
源
class MyController < ApplicationController
def getTracklist
begin
# you need to assign something to a variable
rescue StandardError => e
respond_to do |format|
format.any(:json, :js) do
render :json => {:error => e.message}
end
end
end
end
end
对控制器进行这些更改可以帮助您满足要求。完成此操作后,您不需要视图。