【问题标题】:How do I add extra data to ActiveRecord records being serialized to JSON in Rails?如何在 Rails 中向序列化为 JSON 的 ActiveRecord 记录添加额外数据?
【发布时间】:2010-10-25 14:58:26
【问题描述】:

我通过返回 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,我想继续使用帮助程序而不是用此类信息污染模型。有没有办法做到这一点?还是我最好将其放入模型中?

【问题讨论】:

    标签: ruby-on-rails json serialization


    【解决方案1】:

    你检查过这个吗: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
    

    【讨论】:

      【解决方案2】:

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

      class Range
         def url
           # generate url
           ...
          end
      end
      
      Range.find(:first).to_json(:methods => :url)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 1970-01-01
        • 2011-01-20
        相关资源
        最近更新 更多