2013-06-26 103 views
0

我有一个Rails 3控制器:其他对象包装

class EmployeeController < ApplicationController 
    respond_to :json 

    def index 
    employees = Employee.all 
    respond_with employees 
    end 
end 

如果我把一个撬断点和employees打电话to_json,我得到了我期待的 - 数组的序列化JSON对象,其属性是我Employee ActiveRecord的模型的属性:

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

然而,通过JSON结果从控制器返回的时候,它已经收购了广告对象包装的ditional层:围绕一个列表本身,和一个围绕每个对象:

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

我有没有预料到这些额外的包装层工作的图书馆。 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) 

回答

1

呼叫

ActiveRecord::Base.include_root_in_json = false 

R之前,让步并看看你得到了什么。

如果一切正常,把

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

在你的配置/初始化/ wrap_parameters.rb。

+1

这听起来像是我正在经历的行为,但是'include_root_in_json'已经是false了,并且默认值已经在'wrap_parameters.rb'中设置了。它让我怀疑我的JSON库是否合适 - 我将用我的JSON宝石更新这个问题。 –

+0

有趣的..你可以尝试旧版本的JSON宝石? –