代码之家  ›  专栏  ›  技术社区  ›  mjc

将活动记录转换为模型数组上的json

  •  2
  • mjc  · 技术社区  · 15 年前

    首先,我不使用Rails。我在这个项目中使用了Sinatra,并有活动记录。

    我希望能够在我的模型类上重写为或作为json,并让它定义一些“默认”选项。例如,我有以下内容:

    class Vendor < ActiveRecord::Base
      def to_json(options = {})
        if options.empty?
          super :only => [:id, :name]
        else
          super options
        end
      end
    end
    

    这里的供应商有更多的属性,而不仅仅是id和name。在我的路线上,我有如下东西:

    @vendors = Vendor.where({})
    @vendors.to_json
    

    在这里 @vendors to_json 方法返回所有模型属性。

    我实际上没有修改路由的选项,因为我实际上使用的是修改过的sinatra rest gem(http://github.com/mikeycgto/sinatra rest)。

    关于如何实现这个功能有什么想法吗?我可以在我的sinatra rest gem中做如下事情,但这看起来很傻:

    @PLURAL.collect! { |obj| obj.to_json }
    
    2 回复  |  直到 15 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    尝试重写可序列化的哈希接口:

    def serializable_hash(options = nil)
      { :id => id, :name => name }
    end
    

    更多信息 here

        2
  •  4
  •   Dan Green    13 年前

    如果重写为“as-json”而不是“to-json”,则数组中的每个元素在转换为json之前都将格式化为“as-json”

    我使用以下方法仅公开可访问的属性:

    def as_json(options = {})
        options[:only] ||= self.class.accessible_attributes.to_a
        super(options)
    end