Rails中to_json的默认值为:include

una*_*ana 25 json ruby-on-rails

我们假设我有一个属于用户的模型帖子.要转换为json,我会做这样的事情

@reply.to_json(:include => {:user => {:only => [:email, :id]}, 
               :only => [:title, :id])
Run Code Online (Sandbox Code Playgroud)

但是,我想为此设置一些默认值,所以我不必每次都指定:我试图覆盖as_json来实现这一目标.当我在User模型中添加as_json时,在我执行@ user.to_json时调用它,但是当用户包含在@ reply.to_json中时,忽略了用户的重写as_json.

我该如何工作?

谢谢

Boo*_*age 33

您可以通过覆盖serializable_hash模型来完成此操作,如下所示:

class Reply < ActiveRecord::Base
  def serializable_hash(options={})
    options = { 
      :include => {:user => {:only => [:email, :id]}, 
      :only => [:title, :id]
    }.update(options)
    super(options)
  end
end
Run Code Online (Sandbox Code Playgroud)

这将影响到所有序列化的方法,其中包括serializable_hash,to_json,和to_xml.


pdu*_*ler 0

您可以向 ActiveRecord::Base 添加另一个方法,例如 self.to_minimal_json(*only_fields) 并在那里构建 .to_json 调用。

不起眼,但可能有用。