在to_json上添加自定义属性

时间:2011-04-12 15:12:43

标签: ruby-on-rails json serialization

在使用serialize_with_options时,我意识到它在数组方面无法正常工作。

因此,给定一个@posts数组(如README中所示),调用@ posts.to_json将既不包括用户也不显示标题。

不确定这是否是预期的行为,或者我找不到任何相关内容。

使用Rails 3.0.4

PS。在模型的JSON格式中包含2个自定义属性时,还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

考虑像这样重载ActiveModel::Serializers::JSON.as_json

class Post
  def as_json(options)
    # make sure options is not nil
    options ||= {}
    # call super with modified options
    super options.deep_merge(methods: [:custom_attr1, :custom_attr2])
  end

  def custom_attr1
    "return first custom data"
  end

  def custom_attr2
    "return second custom data"
  end
end

#rspec this like that
describe Post do
  subject { Post.new }
  it "has custom data" do
    to_json.should include(
      { custom_attr1: "return first custom data",
        custom_attr2: "return second custom data"})
  end
end