ActiveModel :: Serializer和继承:无法覆盖属性方法 我的代码:为什么要实施?我除外:

我将rails 5.2.3用于active_model_serializer 0.10.10的API唯一Rails应用程序。

我的代码:

我有一个BaseSerializer和一个UserSerializerUserSerializer继承了BaseSerializer

class Api::V1::BaseSerializer < activeModel::Serializer

  activeModelSerializers.config.key_transform = :camel_lower

  def attributes(*args)
    object.attributes.symbolize_keys
  end

end
class Api::V1::UserSerializer < Api::V1::BaseSerializer

  attributes :id,:name,:created_at

end

为什么要实施?

我真的需要我的UserSerializer(以及我的期货序列化程序)从BaseSerializer继承,以便将所有渲染都保存在camelCase中。
我想在attributes中使用通用的BaseSerializer方法,因为我不需要为要渲染的每个模型都声明一个序列化器。默认情况下,我希望所有字段都呈现。

多亏了activeModelSerializer,当我在控制器中render json: ...时才调用正确的序列化器。

我除外:

  • 当我的API呈现User以外的其他对象时,例如Article:未定义ArticleSerializer,因此使用了BaseSerializer和所有属性返回->它按预期工作! :)
  • 当我的API呈现User对象时:使用UserSerializer(继承自BaseSerializer)。但是attributes中的方法UserSerializer会覆盖BaseSerializer中的方法,因此仅应渲染字段nameidcreated_at- >无效:所有字段均呈现:(
    我放了一个byebug,然后在attributes中传入方法BaseController

此外,为了证明activeModelSerializer能够找到我的UserSerializer:如果我的UserSerializer继承了activeModel::Seializer而不是BaseSerializer,则仅字段:id,{{ 1}}和:name被渲染(但是骆驼案中没有)。

我需要您的帮助,以了解为何覆盖无效的原因。 我会尝试做一些不可能的事情吗?

谢谢,祝你有美好的一天:)

更新

我了解到我对两种方法:created_at感到困惑。不一样(类方法与实例方法)。

我找到了一种完全按照自己的意愿做事的方法:

attributes

仍然需要社区的帮助才能知道我是否做对了:)

我不知道我是否以最简单的方式进行操作,甚至根本不建议这样做,甚至更糟糕。

再次感谢。

flyercatch 回答:ActiveModel :: Serializer和继承:无法覆盖属性方法 我的代码:为什么要实施?我除外:

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3157654.html

大家都在问