0

我有一个 Rails 3 控制器:

class EmployeeController < ApplicationController
  respond_to :json

  def index
    employees = Employee.all
    respond_with employees
  end
end

如果我放入一个 pry 断点并调用to_jsonon employees,我会得到我所期望的 - JSON 对象数组的序列化,其属性是我的EmployeeActiveRecord 模型上的属性:

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

然而,当 JSON 结果从控制器返回时,它已经获得了两层额外的对象包装器:一层围绕列表本身,一层围绕每个对象:

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

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

版本:

$ rails -v
Rails 3.2.13

更新

JSON 宝石版本:

$ grep -i json Gemfile.lock 
    multi_json (~> 1.0)
    multi_json (~> 1.0)
  json (1.8.0)
  multi_json (1.7.7)
    json (~> 1.4)
    multi_json (~> 1.0)
    multi_json (~> 1.0, >= 1.0.2)
4

1 回答 1

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 中。

于 2013-06-26T20:10:37.553 回答