假设我有一个属于用户的模型Post。要转换为json,我要做这样的事情

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

但是,我想为此设置一些默认值,因此不必每次都指定:only。我正在尝试覆盖as_json以完成此操作。当我在用户模型中添加as_json时,当我执行@ user.to_json时会调用该方法,但是当用户包含在@ reply.to_json中时,我为User覆盖的as_json将被忽略。

我该如何工作?

谢谢

最佳答案

您可以通过在模型中覆盖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

这将影响所有可序列化的方法,包括serializable_hashto_jsonto_xml

关于ruby-on-rails - 在Rails中使用:include默认为to_json,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5000870/

10-10 10:09