我已经开始从Rails 4开始。

在处理JSON格式数据时,我发现我们可以使用 rails/jbuilder 并且运行良好。

但是,当我服用Codeschool's Rails 4 Pattern时,他们提到了名为 active_model_serializers 的 gem 。

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

而对于jbuilder gem,我们需要编写扩展名为.json.jbuilder的单独 View 文件。

我的问题是:

  • 哪个是JSON数据处理的理想选择
  • 两个
  • 之间的任何性能差异

    最佳答案

    这取决于您的偏好和需求。
    如果您使用的是Ember.js前端,则我倾向于active_model_serializers,因为Ember.js基本上是精心设计的,可以很好地与之配合使用(Yehuda Katz是active_model_serializers的维护者之一,并且是Ember.js的核心团队;关于该主题的he gave a talk)。
    快速分解:
    Activity 模型序列化器
    将序列化关注点分离到其自己的文件夹/app/serializers中,并带有其自己的Rails生成器,其行为更类似于ActiveRecord,因为您可以在序列化器中定义关联。然后,它将根据其自以为是的惯例自动执行正确的操作(例如, Camel 肠衣,侧面装载关联...等)。 Ryan Bates在以下主题上有出色的RailsCast插曲:http://railscasts.com/episodes/409-active-model-serializers
    Jbuilder
    Jbuilder采取几乎相反的方法,因为它认为JSON格式构造只是另一个Rails View 。就像在 View 模板中一样,您可以在相应的/app/views/目录中构建响应。它可以具有 View 模板的许多特征,例如了解current_user是什么,开箱即用(对于AMS来说不是那么直接),链接关系(@user.posts)...等等。当然,Ryan Bates还针对以下主题做了RailsCast:http://railscasts.com/episodes/320-jbuilder
    替代:Rabl
    瑞安·贝茨(Ryan Bates)(自然)也在Rabl上做了RailsCast:http://railscasts.com/episodes/322-rabl。从概念上讲,它比AMS更接近Jbuilder。而且它已经存在了更长的时间。我个人并不喜欢它的语法。但这是一个见解。

    如果我不从事Ember.js项目,那么我会选择Jbuider,因为它简单易用且概念更平易近人。
    至于性能,至少一个用户声称您可以使Jbuilder比Rabl和AMS都快得多:https://medium.com/@lgmspb/how-we-increased-the-speed-of-json-generation-by-3000-times-ca9395ab7337

    跟进(01/22/2015): Leigh Halliday写了一个不错的速成类(class),比较了一些 gem 。本文除了这里提到的替代方案之外,还涵盖了其他几种替代方案。
    https://www.leighhalliday.com/responding-with-json-in-rails

    关于ruby-on-rails - jbuilder vs rails-api/active_model_serializers用于Rails 4中的JSON处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26097563/

    10-09 12:29