json - ActiveModelSerializers 多态 Json

标签 json polymorphism active-model-serializers

一直在努力尝试通过 rspec 使多态序列化程序工作和测试数据。刚刚升级到 0.10+

我发现这篇文章很有意义,并且确实让我进入了生成序列化的过程,但是,在为多态执行此操作时,我从未正确命名类型和 id(希望看到 asset_id 和 asset_type 嵌套)

{:id=>1,
  :label=>"Today I feel amazing!",
  :position=>0,
  :status=>"active",
  :media_container_id=>1,
  :asset=>
    {:id=>4

Test ActiveModel::Serializer classes with Rspec
class MediaSerializer < ApplicationSerializer
  attributes :id,
             :label,

  has_one :asset, polymorphic: true
end

我注意到测试甚至似乎都没有正确添加多态标识符(即 asset_id、asset_type -- 或在测试用例 imageable_id、imageable_type 中)

https://github.com/rails-api/active_model_serializers/commit/045fa9bc072a04f5a94d23f3d955e49bdaba74a1#diff-c3565d7d6d40da1b2bf75e13eb8e6afbR36

如果我直接上 MediaSerialzer.new(media) 我可以戳 .associations,但我似乎无法让它们呈现,就好像我正在生成完整的有效载荷一样

从文档
https://github.com/rails-api/active_model_serializers
serializer_options = {}
serializer = SomeSerializer.new(resource, serializer_options)
serializer.attributes
serializer.associations

我很确定我错过了什么/做错了什么 - 任何指导都会很棒。

谢谢

最佳答案

获得您想要的效果并不容易,但它是可能的。

您可以通过覆盖 associations 来访问序列化程序生成的哈希值。方法。

class MediaSerializer < ApplicationSerializer
  attributes :id,
             :label,

  has_one :asset, polymorphic: true

  def associations details
    data = super
    data[:asset] = relabel_asset(data[:asset])
    data
  end

  def relabel_asset asset
    labelled_asset = {}
    asset.keys.each do |k|
      labelled_asset["asset_#{k}"] = asset[k];
    end
    labelled_asset
  end
end

我学到了很多关于 ActiveModelSerializer 的知识来掌握这个!我提到了 Ryan Bates 关于这个话题的播客:

http://railscasts.com/episodes/409-active-model-serializers

在那里他描述了如何覆盖 attributes方法和调用 super访问序列化程序生成的哈希值。我猜我可以对 associations 做同样的事情您帖子中提到的方法。从那里需要一点 Ruby 来替换所有键,但是,如果我正确理解了您的要求,那么在技术上是可能的。

希望有帮助!

关于json - ActiveModelSerializers 多态 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974791/

相关文章:

json - 使用 kotlinx.serialization 库反序列化具有不同值类型的 JSON 数组

java try catch 并返回

java - 子类作为抽象方法的参数

ruby-on-rails - 序列化嵌套属性事件模型序列化器

ruby - 如何在 Ruby 1.9 中将 Hash 转换为 JSON 字符串?

C++简单多态问题

oop - 有什么组合不能实现继承可以吗?

ruby-on-rails - 最新的 Active_Model_Serializers 打破了 Devise Views

ruby-on-rails - 如何为事件模型序列化程序关系选择我想要的属性

java - 没有处理程序的适配器 ... DispatcherServlet 配置需要包含支持此处理程序的 HandlerAdapter