在 Rails api 应用程序中使用 "ApplicationController.new.render_to_string"(config.api_only = true)

Using "ApplicationController.new.render_to_string" in a Rails api app (config.api_only = true)

我有一个 Rails 5 应用构建 api app:

# config/application.rb
module MyApp
  class Application < Rails::Application
    config.api_only = true
  end
end

在我的控制器操作之一中,我需要渲染一些 Ruby 风味的 html,然后在 json 响应中返回它。

标准 Rails 应用程序执行此操作:

# app/controllers/my_controller.rb
def my_action
  html = ApplicationController.new.render_to_string("my_erb_or_haml_file", locals: {foo: "bar"}, layout: false)
  render :json => {html: html}, :status => :ok
end

然而,对于我瘦身的 api 应用程序 ApplicationController.new.render_to_string 似乎只是呈现 " "。这让我感到困惑,因为我希望它要么提供内容,要么引发异常。

有什么建议我应该采取什么路线来生成 Ruby 风味的 html?

我猜你必须显式使用基数 class。您的应用程序是一个 API 应用程序,因此您的控制器可能继承自 ActionController::API

ActionController::Base.new.render_to_string