ruby - 在 ActiveRecord 上使用 to_json 时跳过具有 nil 值的属性

标签 ruby json activerecord

我想知道是否有任何方法可以跳过具有 nil 的属性 ActiveRecord 上 to_json 时的值。 默认行为是包含一个 nil 值。

有没有办法让这个值不出现?

最佳答案

@lars 的回答适用于单个对象,但对于 Active Record 对象数组,您将不得不遍历数组的每个元素并进行转换。如果每次为该模型调用 .to_jsonrender :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_jsonrender :json => 时都希望执行此操作时才使用此方法。否则你应该坚持@lars 的回答。

关于ruby - 在 ActiveRecord 上使用 to_json 时跳过具有 nil 值的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914022/

相关文章:

ruby - 如何找出在 Ruby 中调用方法的行号?

ruby - 先按值排序散列,然后按键排序

ios - 如何解码包含日期信息的 JSON?

ruby-on-rails - 选择带有预加载的特定列

ruby - 将 'Total' 列添加到 CSV

python - JSON 架构 oneOf 验证问题

java - .execute 无法解析为类型 - AsyncTask (Android)

ruby-on-rails - 通过查询空的has_many

ruby - Rails - 未定义的方法 `authenticate'

c# - 哪种语言可以在运行时动态更改类成员?