如何为所有RoR模型将include_root_in_json设置为false?

时间:2010-12-10 10:44:39

标签: ruby-on-rails ruby-on-rails-3 json activemodel

如何为所有RoR模型将include_root_in_json设置为false?

我试过在application.rb中设置ActiveModel :: Base.include_root_in_json = false,但它没有效果。

6 个答案:

答案 0 :(得分:12)

Model.to_json方法用于返回表示模型的JSON字符串,我已经使用过 模型本身中的 self.include_root_in_json = false

但是对于整个应用程序,您可以尝试在初始化程序中设置 ActiveModel :: Base.include_root_in_json = false 。[编辑这不起作用。]

[edit] ActiveRecord :: Base.include_root_in_json = true 尝试将此行添加到config / environment.rb文件中。

答案 1 :(得分:5)

我不确定这对于更高版本的rails是否属实,但对于我(运行2.3.5 atm),在/config/initializers/new_rails_defaults.rb中已经有一个声明用于此设置,其中它已设置为:

ActiveRecord::Base.include_root_in_json = true

因此,如果您尝试在其他位置设置此设置,则可能会覆盖它。

答案 2 :(得分:2)

在Rails 3.2.2上,这已经在初始化器中设置:

--- config/initializers/wrap_parameters.rb ---

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

答案 3 :(得分:1)

对于默认的系统范围配置,总是在初始化器中设置变量,比如config / initializers / defaults.rb

答案 4 :(得分:1)

我认为你应该在config / application.rb中设置ActiveRecord :: Base.include_root_in_json = false

不是ActiveModel :: Base

答案 5 :(得分:0)

在" config / initializers / wrap_elements.rb"中的Rails 4您可以取消注释以下内容:

ActiveSupport.on_load(:active_record) do
 self.include_root_in_json = true
end