您没有包含您的控制器代码,但我们假设它最终继承自ActionController::API
(如果它是 API 控制器则应该如此)。如果是这样,那是它的根源,而不是命名空间等。根据 ActionController 文档:
API 控制器与普通控制器的不同之处在于,默认情况下它不包含浏览器访问通常需要的许多功能:布局和模板渲染、flash、资产等。这使得整个控制器堆栈更薄,适用于 API 应用程序。这并不意味着如果你需要它们就没有这些特性:它们都可供你包含在你的应用程序中,它们只是不是默认 API 控制器堆栈的一部分。
更薄的 API 控制器的副作用之一是它们不会像标准 Rails 控制器那样自动包含帮助程序。不过,您可以轻松地将其重新添加。
消息控制器.rb
class Api::V1::MessagesController < ActionController::API
include ActionController::Helpers
helper ApplicationHelper
def show
# whatever
end
end
app/helpers/application_helper.rb
module MessagesHelper
def some_method(arg)
# whatever
end
end
应用程序/视图/消息/show.json.jbuilder
json.bogus do
thing1: some_method('banana')
end
如果你有很多 API 控制器,你当然可以把它放在一个它们都继承自的基本控制器类中,如下所示:
class Api::V1::ApiController < ActionController::API
include ActionController::Helpers
helper ApplicationHelper
end