Rails生成的JSON中的其他对象包装器

时间:2013-06-26 20:07:33

标签: json ruby-on-rails-3

我有一个Rails 3控制器:

class EmployeeController < ApplicationController
  respond_to :json

  def index
    employees = Employee.all
    respond_with employees
  end
end

如果我放入一个pry断点并在to_json上调用employees,我会得到我所期望的 - 一系列JSON对象的序列化,其属性是我{{1}的属性} ActiveRecord模型:

Employee

但是,当从控制器返回JSON结果时,它已经获得了两个附加的对象包装层:一个围​​绕列表本身,一个围绕每个对象:

[1] pry(#<EmployeeController>)> employees.to_json
=> "[{\"created_at\":\"2013-06-21T19:22:14Z\",\"email\":\"ian@ ...

我正在使用的库不期望这些额外的包装层。 Rails的哪一部分负责添加它们,这是我可以控制的行为吗?

版本:

{"employee":[{"employee":{"created_at":"2013-06-21T19:22:14Z","email":"ian@ ...

更新

JSON gem版本:

$ rails -v
Rails 3.2.13

1 个答案:

答案 0 :(得分:1)

呼叫

ActiveRecord::Base.include_root_in_json = false

在渲染之前看看你得到了什么。

如果有效,请填写

# Disable root element in JSON by default.
ActiveSupport.on_load(:active_record) do
  self.include_root_in_json = false
end
在config / initializers / wrap_parameters.rb中