2014-02-08 141 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}