gpt4 book ai didi

json - ActiveModelSerializers 多态 Json

转载 作者:行者123 更新时间:2023-12-04 15:55:04 24 4
gpt4 key购买 nike

一直在努力尝试通过 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com