Ruby API响应视图:如何呈现JSON响应



我是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

对控制器进行这些更改可以帮助您满足要求。完成此操作后,您不需要视图。

最新更新