ruby-on-rails 序列化在Ruby中和在其他语言中一样吗

nnsrf1az  于 2022-11-19  发布在  Ruby
关注(0)|答案(2)|浏览(146)

我已经开始用Ruby构建应用程序,并开始了解gem序列化器,但我感到困惑,因为我来自python背景,序列化意味着将响应转换为字节,但在这里我们只是使用作为属性。
在Ruby中,序列化究竟发生了什么?

class UserSerializer < ActiveModel::Serializer
attributes :name
end
kr98yfug

kr98yfug1#

Ruby中的序列化通常意味着将任何类型的对象转换为可以传输或存储的形式。
例如,built in Marshal module将对象转换为字节流,允许它们存储在当前活动脚本之外,然后重新构造。这是一种 * 串行化 * 的形式,Pythonista应该可以立即识别。
在Rails中,术语 serialization 通常用于两个方面:

  • 将模型数据转换成JSON(或者以前的XML)之类的传输格式,通过网络发送到客户端或其他服务器。Rails有simple form of serialization built in through the as_json method。这就是像ActiveModel::Serializers、jbuilder和plethora of JSONAPI.org gems这样的宝石发挥作用的地方。
  • ActiveRecord::AttributeMethods::Serialization--这是一个老的方法,可以在数据库中的VARCHAR或TEXT类型列中存储哈希值和其他类型的对象。Rails在应用程序端将它们封送/解送为JSON或YAML,如果你想以一种合理的方式查询数据,这有点糟糕。虽然这在很大程度上被原生的ARRAY和JSON/JSONB类型,它仍然有一些合法的用途,如存储加密数据。

ActiveModel::Serializers(不要与ActiveModel::Serialization中内置的Rails混淆)基本上是Rails对象序列化的瑞士推土机。它由一个非常简单的序列化器类结构组成,这些类是将模型转换为JSON的蓝图。它们在控制器中用于提供JSON响应。
例如,该序列化程序可能会生成如下内容:

{
  "name": "John Doe"
}

但实际的格式取决于ActiveModel::Serializer的配置-它可以生成大量不同的输出格式,如“平面对象”或JSONAPI.org:

{
  "type": "user",
  "id": "1",
  "attributes": {
    "name": "John Doe",
  }
}
iovurdzv

iovurdzv2#

Rails做同样的事情,但是它使两者都变得容易,就像你可以将它转换成二进制以及人类可读的。

相关问题