我最近将我的一个rails项目从 3.2.22.5 升级到了 4.2.10 ,我发现 render :json 在旧的rails版本中的工作方式发生了变化,

我无法解释或弄清楚为什么 rails 4.2 它不包括渲染的json中的根节点 .

我的控制器没有型号,这是我的 wrap_parameters.rb 文件

# Be sure to restart your server when you modify this file.
#
# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.

# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json]
end

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end

这是我的控制器代码,

module Private; module Api

  class TestController < ActionController::Base

    respond_to :json

    def index
      begin
        render :json => output_data
      rescue => e
        logger.error e.message
        logger.error e.backtrace
        render :json => {}, :status => 500
      end
    end


  end

end; end

rails 3 的输出是类似的

{test: [...]}

rails 4 输出是

[...]

我也尝试添加 root: :true 来渲染但它没有做任何事情 .

我现在可以用控制器键轻松包装输出(轨道4)并完成它,但我不明白为什么或改变它的原因,我不能轻易找到任何提及它 .