我已经开始用Ruby构建应用程序,并开始了解gem序列化器,但我感到困惑,因为我来自python背景,序列化意味着将响应转换为字节,但在这里我们只是使用作为属性。在Ruby中,序列化究竟发生了什么?
class UserSerializer < ActiveModel::Serializer attributes :name end
kr98yfug1#
Ruby中的序列化通常意味着将任何类型的对象转换为可以传输或存储的形式。例如,built in Marshal module将对象转换为字节流,允许它们存储在当前活动脚本之外,然后重新构造。这是一种 * 串行化 * 的形式,Pythonista应该可以立即识别。在Rails中,术语 serialization 通常用于两个方面:
as_json
ActiveModel::Serializers(不要与ActiveModel::Serialization中内置的Rails混淆)基本上是Rails对象序列化的瑞士推土机。它由一个非常简单的序列化器类结构组成,这些类是将模型转换为JSON的蓝图。它们在控制器中用于提供JSON响应。例如,该序列化程序可能会生成如下内容:
ActiveModel::Serialization
{ "name": "John Doe" }
但实际的格式取决于ActiveModel::Serializer的配置-它可以生成大量不同的输出格式,如“平面对象”或JSONAPI.org:
{ "type": "user", "id": "1", "attributes": { "name": "John Doe", } }
iovurdzv2#
Rails做同样的事情,但是它使两者都变得容易,就像你可以将它转换成二进制以及人类可读的。
2条答案
按热度按时间kr98yfug1#
Ruby中的序列化通常意味着将任何类型的对象转换为可以传输或存储的形式。
例如,built in Marshal module将对象转换为字节流,允许它们存储在当前活动脚本之外,然后重新构造。这是一种 * 串行化 * 的形式,Pythonista应该可以立即识别。
在Rails中,术语 serialization 通常用于两个方面:
as_json
method。这就是像ActiveModel::Serializers、jbuilder和plethora of JSONAPI.org gems这样的宝石发挥作用的地方。ActiveModel::Serializers(不要与
ActiveModel::Serialization
中内置的Rails混淆)基本上是Rails对象序列化的瑞士推土机。它由一个非常简单的序列化器类结构组成,这些类是将模型转换为JSON的蓝图。它们在控制器中用于提供JSON响应。例如,该序列化程序可能会生成如下内容:
但实际的格式取决于ActiveModel::Serializer的配置-它可以生成大量不同的输出格式,如“平面对象”或JSONAPI.org:
iovurdzv2#
Rails做同样的事情,但是它使两者都变得容易,就像你可以将它转换成二进制以及人类可读的。