2010-06-17 85 views
0

我正在使用Rails 3 w/Mongoid,(所以没有ActiveRecord)。 Mongoid使用ActiveModel的“to_json”方法,默认情况下,该方法包含JSON中的根对象(我不想)。如何将ActiveModel :: Base.include_root_in_json设置为false?

我试图把这个在初始化:

ActiveModel::Base.include_root_in_json = false 

但得到的错误

uninitialized constant ActiveModel::Base 

任何想法如何,我可以改变呢?我直接在源代码中更改了默认值,它工作正常,但显然我想正确地做到这一点。

的变量在此文件的顶部定义: Github - activemodel/lib/active_model/serializers/json.rb

从文档: “选项::加载ActiveModel控制Base.include_root_in_json的to_json顶级的行为是默认为true。 “

回答

1
ActiveModel::Base.include_root_in_json = false 

在初始化器?? ??

+0

啊我编辑的问题,而你写了这个。我已经尝试过,并且出现错误。有任何想法吗? – 2010-06-17 05:31:19

+0

我已经和更多的人交谈过,并确认这确实是应该如何完成的。我的代码中必须有其他东西搞砸了。 – 2010-07-24 00:02:15

+1

我也有同样的问题。你解决了吗? – 2010-12-10 11:44:27

4

您应该简单地把它放在包括加载ActiveModel模块类:

class Person 
    include ActiveModel::Validations 
    include ActiveModel::Serializers::JSON 
    self.include_root_in_json = false 

    ... 
end 
+0

谢谢,这对我使用neo4j模型非常有效 – 2012-01-26 04:13:37

8

我知道这是旧的,但另一种方式,你可以做到这一点是通过在application.rb中的应用类中放置该:

# When JSON-encoding a record, don't wrap the attributes in a hash where the 
# key is named after the model 
config.active_record.include_root_in_json = false 
+0

如果您需要将它应用于所有型号,这种简单的方法。 – rchampourlier 2011-05-27 09:21:07

+0

他问ActiveModel,而不是ActiveRecord,这是一个很大的区别 – 2012-01-19 09:32:02

0

如果你喜欢初始化,它ActiveRecord::Base,不ActiveModel::Base在Rails的版本2 *和3.1,可能是3.0。通过源代码查看,在3.0测试版中,它已切换到ActiveModel,但在某个时刻又回到了ActiveRecord。

ActiveRecord::Base.include_root_in_json = false 

此外,如果你确实想使用此功能,在Rails的3.1 PARAMS包装是相关的:

的ActionController :: ParamsWrapper

裹参数散列成嵌套散列。这将允许客户端提交POST请求,而不必指定任何根元素。

http://edgeapi.rubyonrails.org/classes/ActionController/ParamsWrapper.html

相关问题