【发布时间】:2010-12-10 10:44:38
【问题描述】:
如何将所有 RoR 模型的 include_root_in_json 设置为 false?
我尝试在 application.rb 中设置 ActiveModel::Base.include_root_in_json = false,但没有效果。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 json activemodel
如何将所有 RoR 模型的 include_root_in_json 设置为 false?
我尝试在 application.rb 中设置 ActiveModel::Base.include_root_in_json = false,但没有效果。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 json activemodel
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 文件中。
【讨论】:
ActiveRecord::Base.include_root_in_json = false 的初始化程序,它对我来说很好用(我使用的是 Rails 3.0.4)。你必须记住的事情(它曾经让我失望)是,如果你更改了初始化程序,你需要重新启动服务器或重新加载控制台才能使其生效。
我不确定这是否适用于更高版本的 rails,但对我来说(运行 2.3.5 atm)已经在 /config/initializers/new_rails_defaults.rb 中声明了这个设置,它被设置为:
ActiveRecord::Base.include_root_in_json = true
因此,如果您尝试在其他地方设置此设置,那么它可能会被覆盖。
【讨论】:
config/initializers/new_rails_defaults.rb 中的“true”更改为“false”。
在 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
【讨论】:
对于默认系统范围的配置,在初始化程序中设置变量总是个好主意,例如 config/initializers/defaults.rb
【讨论】:
我认为你应该在 config/application.rb 中设置 ActiveRecord::Base.include_root_in_json = false
不是 ActiveModel::Base
【讨论】:
在 Rails 4 中的“config/initializers/wrap_elements.rb”中,您可以取消注释以下内容:
ActiveSupport.on_load(:active_record) do
self.include_root_in_json = true
end
【讨论】: