2

我想用as_json方法自定义我的 ActiveModel 实例的 json 输出。但是虽然在only选项中传递了属性白名单,但结果包括所有属性。

这是示例:

class Foo
  include ActiveModel::Model
  attr_accessor :a, :b
end  

Foo.new(a: 1, b: 2).as_json
# {"a" => 1, "b" => 2}

Foo.new(a: 1, b: 2).as_json(only: [:a])
# {"a" => 1, "b" => 2}
# but I expect {"a" => 1}

是不是我做错了什么?

4

1 回答 1

1

我忘记了包含ActiveModel::Serializers::JSON模块和attributes方法。在此修复后,所有工作都按预期进行:

class Foo
  include ActiveModel::Model
  include ActiveModel::Serializers::JSON
  attr_accessor :a, :b

  def attributes
    {'a' => nil, 'b' => nil}
  end  
end  

Foo.new(a: 1, b: 2).as_json
# {"a" => 1, "b" => 2}

Foo.new(a: 1, b: 2).as_json(only: [:a])
# {"a" => 1}
于 2014-02-08T16:47:38.403 回答