我已经开始从Rails 4
开始。
在处理JSON格式数据时,我发现我们可以使用 rails/jbuilder
并且运行良好。
但是,当我服用Codeschool's Rails 4 Pattern时,他们提到了名为 active_model_serializers
的 gem 。
而对于active_model_serializers
gem,JSON
序列化的所有逻辑都进入模型(被认为是最佳实践)。
而对于jbuilder
gem,我们需要编写扩展名为.json.jbuilder
的单独 View 文件。
我的问题是:
最佳答案
这取决于您的偏好和需求。
如果您使用的是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/