我在我的应用程序之后命名了一个这样的类并将其放入lib/my_app/
. 例如,如果您的应用程序是FooBar
我将有一个文件夹lib/foo_bar/api
并将您的类定义lib/foo_bar/api/error.rb
为
class FooBar::Api::Error
# ...
end
这可以调用FooBar::Api::Error.new(...)
如果您选择走这条路线,则需要添加lib/
到您config.autoload_paths
的config/application.rb
config.autoload_paths += Dir["#{config.root}/lib"]
你知道我怎样才能让render error
代码返回错误状态码吗?不使用(:status => error.status)
当然可以,但据我所知,你不能只是通过error
。你必须打电话给像
error = FooBar::Api::Error.new({ message: "Some error message" }, status: :bad_request)
render *error.to_a
然后你必须定义一个to_a
方法FooBar::Api::Error
class FooBar::Api::Error
def initialize(data={}, options={})
@data = data
@options.reverse_merge! status: 200
end
def to_a
[@data, @options]
end
end
当你打电话时,error.to_a
你会得到一个数组,其中包含要传递给的参数列表render
。上面的*
渲染行是 Splat 运算符(在此处了解更多信息),将 Array 扩展为要传递的参数列表,render
而不是将整个返回的 Array 作为第一个参数发送。