在ActiveRecord上的to_json时跳过具有nil值的属性

Oks*_*ana 3 ruby activerecord json

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

有没有一种方法可以使这个值不显示?

rub*_*nce 9

@ lars的答案适用于单个对象,但对于Active Record对象的数组,您必须遍历数组的每个元素并进行转换.如果您希望每次调用.to_jsonrender :json =>为该模型进行此转换,您可以覆盖as_json模型中的函数,如下所示:

class Model
  ..
  def as_json(options={})
    super(options).reject { |k, v| v.nil? }
  end
end
Run Code Online (Sandbox Code Playgroud)

此外,我假设您已ActiveRecord::Base.include_root_in_json = false在您的环境中定义(config/initializers/active_record.rb在Rails 3和config/initializers/new_rails_defaults.rbRails 2中).否则,您将必须在模型中完全实现@lars的函数(value[0]获取属性hash等).

仅当您希望每次调用.to_jsonrender :json =>为该模型执行此操作时,才使用此方法.否则你应该坚持@ lars的答案.