嵌入式模型的虚拟属性

时间:2018-03-28 10:59:21

标签: ruby-on-rails mongoid

是否可以为嵌入式模型提供虚拟属性?

我有一个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

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

如果我这样做:    b.a.as_json

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

有没有办法让我获得调用b.as_json的虚拟属性?

谢谢, 迈克尔

1 个答案:

答案 0 :(得分:0)

似乎as_json没有重新调用as_json。解决方案是覆盖serializable_hash而不是as_json,它按预期工作。不知道它与as_json不起作用的原因是什么。

RGDS Michaek