我从Rails 4开始.

在处理JSON格式的数据时,我发现我们可以使用rails/jbuilder,而且效果很好.

然而,当我拿Codeschool's Rails 4 Pattern分时,他们提到了名为active_model_serializers的Ruby .

而对于active_model_serializersgem,JSON序列化的所有逻辑都进入模型(这被认为是最佳实践).

而对于jbuildergem,我们需要编写扩展名为.json.jbuilder的独立视图文件.

我的问题是:

  • 哪一个最适合JSON数据处理
  • 两者之间有性能差异吗

推荐答案

这取决于你的喜好和需要.

如果你正在与余烬合作.js前端,从余烬开始我倾向于active_model_serializers.js基本上是精心设计的,可以很好地使用它(Yehuda Katz是active_model_serializers的维护者之一,不久前是Ember.js的核心团队;he gave a talk的主题).

快速细分:

Active Model Serializers

将序列化问题分离到自己的文件夹/app/serializers中,并附带自己的Rails生成器,其行为更像ActiveRecord,因为您可以在序列化程序中定义关联.然后,它会根据其固执己见的惯例(例如,骆驼壳、侧装关联等)自动做正确的事情.瑞安·贝茨(Ryan Bates)有一集关于RailsCast的精彩剧集,主题是:http://railscasts.com/episodes/409-active-model-serializers

Jbuilder

Jbuilder采取了几乎相反的方法,因为它认为JSON格式的构造只是另一个Rails视图.您可以在相应的/app/views/个目录中构建响应,就像使用视图模板一样.它可以具有视图模板的许多特性,比如理解current_user是什么、开箱即用(这与AMS不同)、链接关系(@user.posts)...当然,瑞安·贝茨也做了一个关于这个主题的RailsCast:http://railscasts.com/episodes/320-jbuilder

Alternative: Rabl

瑞安·贝茨(Ryan Bates)在拉布尔(Rabl)也做了一个铁路司机:http://railscasts.com/episodes/322-rabl.在概念上,它比AMS更接近Jbuilder.而且它的存在时间也更长.就我个人而言,我不太喜欢它的语法.但这是意见的问题.


如果我不是在余烬上工作.js项目,我会 Select Jbuider,因为它的简单性和更容易理解的概念.

至于性能,至少有一位用户声称,您可以使Jbuilder比Rabl和AMS快得多:https://medium.com/@lgmspb/how-we-increased-the-speed-of-json-generation-by-3000-times-ca9395ab7337


Follow up (01/22/2015): Leigh Halliday写了一个不错的速成班,比较了一些Ruby .除了这里提到的选项之外,本文还介绍了其他几个选项.

Ruby-on-rails相关问答推荐

Rails 7,返回具有两个单独条件的活动记录关联,一个在父级,一个在子级

搜查升级到 4.0.0 和 ActionText::RichText

如何使用 Rails 语义记录器记录整个请求(标头、正文等)

如何让删除链接响应 Rails 7 中的 turbo_stream 和 html?

Ruby 3 动态关键字参数

Ruby on rails 查询不知道怎么写

I18n 用于特定于模型的 Rails 提交按钮

验证以确保唯一性但忽略空值?

twitter bootstrap下拉突然不起作用

我如何存根 find_each 以在 rails 3 中进行 rspec 测试

没有要加载的文件 - readline

Ruby如何写入Tempfile

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

如何将自定义路由添加到资源路由

Sidekiq 在 docker-compose 上的 127.0.0.1:6379 (Errno::ECONNREFUSED) 上连接到 Redis 时出错

如何在 Rails 迁移中判断数据库类型?

设计:为什么我的注销链接不起作用?

Rails 路由:GET 没有参数 :id

未捕获的 ReferenceError:未定义 ReactDOM

期望 true 响应 true?