Rails Serializer输出命名

时间:2013-12-17 15:18:48

标签: ruby-on-rails serialization

希望有人可以帮助我。

我注意到使用序列化程序格式化的json输出采用了序列化程序的名称。即如果我使用的序列化程序是user_input_serializer,则JSON对象将为{ user_input:{...} }。如果序列化器是blah_blah_serializer那么输出将是{blah_blah:{...}}

我想知道无论我使用什么样的序列化器,我是否可以使那个前导标记相同。

编辑:

一些代码例如

class UserSerializer < ActiveModel::Serializer
 attributes :first_name, 
 :last_name, 
 :email, 
 :gender,
 :chat_handle, 
 :position, 
 :location,
 :status
end

class UserShortSerializer < ActiveModel::Serializer
 attributes :first_name, 
 :last_name, 
 :email
end

假设我有两个类在两种不同的情况下序列化相同的用户模型......不知何故,REST api中的json输出将带有{“user”:{...}}和{“user_short” :{...}} 分别。这为我们的客户端应用程序创建了一些潜在的解析问题?

1 个答案:

答案 0 :(得分:0)

使用ActiveModel::Serializer,您可以删除根密钥,例如:

UserShortSerializer.new(User.first).to_json(root: false)

或者您可以使用以下命名更改其名称:

UserShortSerializer.new(User.first).to_json(root: "my_root_name")

如果您希望全面使用某种行为,可以在config/initializers文件夹中创建一个文件并设置ActiveModel::Serializer.root = "my_default_name"。然后,如果在检索序列化数据时未指定其他根名称,则将使用默认名称。您还可以使用控制器中的default_serializer_options方法调整默认值。

可以在active_model_serializers documentationRailsCast #409 - Active Model Serializers中找到更多信息。