2014-02-08 62 views
1

我想用as_json方法定制我的ActiveModel实例的json输出。但是,虽然通过only选项中的属性的白名单,但结果包含所有属性。ActiveModel的`as_json`不能按预期工作

这里是例子:

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} 

是不是我做错了什么?

回答

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}