覆盖Active Model Serializer中的embed_key

时间:2014-06-28 18:52:27

标签: ruby-on-rails-4 active-model-serializers

我有一个序列化程序,其中包含一些has_many个关联,我修改了embed_key

我正在尝试将模型的ID设为path-name而不是12。下面的代码就是这样:

class SymbolSerializer < ActiveModel::Serializer

  attributes  :id,
              :name,
              :parent_id,
              :rails_id

  embed :ids, include: true
  has_many  :ancestors, embed_key: :symbol_path, serializer: SimplifiedSymbolSerializer
  has_many  :children,  embed_key: :symbol_path, serializer: SimplifiedSymbolSerializer
  has_one   :parent,    embed_key: :symbol_path, serializer: SimplifiedSymbolSerializer
  has_many  :siblings,  embed_key: :symbol_path, serializer: SimplifiedSymbolSerializer

  def id
    object.symbol_path
  end

  def parent_id
    object.id
  end

  def rails_id
    object.id
  end
end

问题是我还想拥有父对象的实际id(我试图在我的parent_id方法中做^^)

现在,重写的方法仍会返回:symbol_path键,而不是id

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

对我来说,解决这个问题最简单的方法就是为我想传递的密钥使用不同的命名约定。

所以我所要做的就是在那里添加这个方法/属性:

  def parent_rails_id
    object.parent.id
  end