我将rails 5.2.3
用于active_model_serializer 0.10.10
的API唯一Rails应用程序。
我有一个BaseSerializer
和一个UserSerializer
。 UserSerializer
继承了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: ...
时才调用正确的序列化器。
User
以外的其他对象时,例如Article
:未定义ArticleSerializer
,因此使用了BaseSerializer
和所有属性返回->它按预期工作! :) User
对象时:使用UserSerializer
(继承自BaseSerializer
)。但是attributes
中的方法UserSerializer
会覆盖BaseSerializer
中的方法,因此仅应渲染字段name
,id
和created_at
- >无效:所有字段均呈现:( attributes
中传入方法BaseController
。 此外,为了证明ActiveModelSerializer能够找到我的UserSerializer:如果我的UserSerializer
继承了ActiveModel::Seializer
而不是BaseSerializer
,则仅字段:id
,{{ 1}}和:name
被渲染(但是骆驼案中没有)。
我需要您的帮助,以了解为何覆盖无效的原因。 我会尝试做一些不可能的事情吗?
谢谢,祝你有美好的一天:)
我了解到我对两种方法:created_at
感到困惑。不一样(类方法与实例方法)。
我找到了一种完全按照自己的意愿做事的方法:
attributes
仍然需要社区的帮助才能知道我是否做对了:)
我不知道我是否以最简单的方式进行操作,甚至根本不建议这样做,甚至更糟糕。
再次感谢。