我想知道是否有任何方法可以跳过具有 nil 的属性 ActiveRecord 上 to_json 时的值。 默认行为是包含一个 nil 值。
有没有办法让这个值不出现?
最佳答案
@lars 的回答适用于单个对象,但对于 Active Record 对象数组,您将不得不遍历数组的每个元素并进行转换。如果每次为该模型调用 .to_json
或 render :json =>
时都希望进行此转换,则可以覆盖模型中的 as_json
函数像这样:
class Model
..
def as_json(options={})
super(options).reject { |k, v| v.nil? }
end
end
此外,我假设您已经在您的环境中定义了 ActiveRecord::Base.include_root_in_json = false
(config/initializers/active_record.rb
在 Rails 3 和config/initializers/new_rails_defaults.rb
在 Rails 2)。否则,您将不得不在模型中完全实现@lars 的功能(采用value[0]
来获取属性散列等)。
仅当您每次为该模型调用 .to_json
或 render :json =>
时都希望执行此操作时才使用此方法。否则你应该坚持@lars 的回答。
关于ruby - 在 ActiveRecord 上使用 to_json 时跳过具有 nil 值的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914022/