我最近将我的一个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)并完成它,但我不明白为什么或改变它的原因,我不能轻易找到任何提及它 .