rails to_xml / to_json选项

时间:2014-05-03 16:06:21

标签: ruby-on-rails ruby ruby-on-rails-4

我正在玩rails,我正在尝试将我的模型渲染为xml和json。

现在,在我的所有模型中,我想删除created_at和updated_at列 - 并且我的to_xml / json中的每一个都添加了一个except来反对DRY。

所以我想知道我该怎么做。

我看到人们重写to_xml方法 - 但我仍然需要对每个模型都这样做 - 如果有这个地方我会需要那些列怎么办?

我正在寻找像

这样的东西
xxx = :except => [:created_at, :updated_at]

在每次渲染中我都会将xxx发送给选项。

  • 为了记录 - 我知道如何使用to_json / to_xml - 我只是不想重复这些经常使用的选项。

5 个答案:

答案 0 :(得分:2)

试试这个:

xxx.to_json(:except => [ :created_at, :updated_at ])

答案 1 :(得分:2)

我最终创建了一个重写serializable_hash(用于json和xml)的模块

module DefaultRenderingModule

  def serializable_hash (options = {})
    if(options.has_key? :all)
       super(options.except!(:all))
    else
      x = [:created_at, :updated_at]
      if options.has_key? :except
        x.append(options[:except])
      end
      options.merge! :except => x
      super(options)
    end
  end
end

我把它包含在我想要这种行为的每个模型中

答案 2 :(得分:0)

检查文档http://apidock.com/rails/ActiveRecord/Serialization/to_json

xxx.to_json(:except => [ :id, :created_at, :age ])

答案 3 :(得分:0)

答案 4 :(得分:0)

覆盖模型中的as_json。这是用于在执行

时生成json的内容

渲染:json => @object

def as_json(options = {})
  super(options.merge(:except => [:created_at, :updated_at]))
end

你可以玩这个 - 使用提交或不提交的选项。

使用:only,:methods和:include来完全自定义输出。