如何向Rails中序列化为JSON的ActiveRecord记录添加额外数据?

时间:2009-05-12 16:58:09

标签: ruby-on-rails json serialization

我通过返回JSON的简单API公开了一些资源。我想为每个资源注入路径,以便消费者不需要构建它们。类似User.all.to_json的所需输出示例:

users: [
  {user: {
    id: 1,
    name: 'Zaphod',
    url: 'http://domain.com/users/1.json'
  }},
  {user: {
    id: 2,
    name: 'Baron Munchausen',
    url: 'http://domain.com/users/2.json'
  }}
];

为了生成URL,我想继续使用帮助程序,而不是用这种信息污染模型。有没有办法做到这一点?或者我最好把它放入模型中?

2 个答案:

答案 0 :(得分:4)

如果您想要包含在json序列化中的模型方法,则可以使用内置to_json调用:methods参数:

class Range
   def url
     # generate url
     ...
    end
end

Range.find(:first).to_json(:methods => :url)

答案 1 :(得分:0)

你有没有看过这个:http://json.rubyforge.org/

class Range
  def to_json(*a)
    {
      'json_class'   => self.class.name,
      'data'         => [ first, last, exclude_end? ]
    }.to_json(*a)
  end

  def self.json_create(o)
    new(*o['data'])
  end
end