ActiveModel的`as_json`无法按预期工作

时间:2014-02-08 16:04:56

标签: ruby ruby-on-rails-4 active-model-serializers

我想用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}

我做错了吗?

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}