我想用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}
我做错了吗?
答案 0 :(得分: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}