嵌入式模型的虚拟属性



是否可以具有嵌入式模型的虚拟属性?

我有一个A级:

class A
  include Mongoid::Document
  field :name, type: String
  embedded_in :b
  def pnl=(p)
  end
  def pnl
    "p"
  end
  def as_json(options={})
     attrs = super(methods: [:pnl])
     attrs
  end
end

和B类:

class B
  include Mongoid::Document
  field :name, type: String
  embedds :a
end

如果我从B中拍摄记录: b = b.first b.as_json

我没有从嵌入式A类获取虚拟属性 - 我只看到持久属性。我的控制器应该返回包含其嵌入式对象的所有虚拟属性 - 但这不起作用。

如果我这样做: B.A.AS_JSON

然后,我得到了嵌入式A类的虚拟属性,但这无济于事。如果我不使用嵌入式关系,而是使用引用的关系(属于/has_one(,则可以正常工作,但是我认为嵌入关系对我的用例会更好。更正:它也无法与参考的关系作用。似乎没有任何关系支持虚拟属性?

有没有办法我也会得到虚拟属性调用b.as_json?

谢谢迈克尔

似乎as_json不递归呼叫as_json。解决方案是覆盖Serializable_hash而不是AS_JSON,并且可以按预期工作。不确定它与as_json不起作用的原因是什么。

RGDMichaek

最新更新