使用DataMapper而不是ActiveRecord

时间:2011-03-18 11:31:29

标签: ruby-on-rails ruby-on-rails-3 orm activerecord datamapper

DataMapper的想法是definitely better而不是ActiveRecord。它有一个用于各种数据存储的API,包括RDBMS和NoSQL存储。 DataMapper比ActiveRecord更智能。它具有“战略急切加载”。此功能单手消除“N + 1查询问题”。另外,它允许延迟加载像Text属性这样的重字段。 DataMapper允许您通过提供条件的嵌套哈希来创建和搜索任何复杂的对象图。 ActiveRecods不适合用于生产中的关联。 include方法很丑陋且不可配置。 2010年10月,乔希·西蒙兹(Josh Symonds)制作了一个patch for this method,允许将字段排除在急切加载之外。但是这条路被忽略了,今天在rails3中我们有同样丑陋的包含方法。

即使在具有出色AREL的Rails3中,ActiveRecord也远不是最好的轨道。你可能会说“哇,新的宝石metawhere允许编写像Article.where(:title.matches => 'Hello%', :created_at.gt => 3.days.ago)这样的好代码”。但是等等...... DataMapper支持这个开箱即用!也许而不是修改ActiveRecord看起来像DataMapper更好的是扩展和支持更好的orm?有关DataMapper的更多详细信息,请访问http://datamapper.org/

我认为,后续版本中的rails应该允许我们选择使用哪个orm,就像现在它允许数据库选择一样。即使它只有一个选项“ActiveRecord”,人们也会搜索可用的替代品。当我开始学习rails时,我认为只支持ActiveRecord。后来我甚至没有尝试寻找别的东西。

为什么我要写这些东西?我想,我们需要更加关注这个漂亮的ORM。如果您是一些流行或不那么受欢迎的宝石的开发者,请考虑添加对DataMapper的支持。 DataMapper社区应该从ActiveRecord或其他ORM编写一些迁移指南,并保持文档的最新状态,您可以帮助他们。至于我,DataMapper社区需要更多人,你可能就是其中之一。 这个ORM的唯一缺点是缺少文档,你可以提供帮助。

那你觉得怎么样?

2 个答案:

答案 0 :(得分:4)

Rails 3允许您使用Datamapper,而不是默认情况下。你确实想要使用带有rails 3的datamapper。只需这样做

    rails new project_name -m http://datamapper.org/templates/rails.rb

Rails允许您选择,甚至可以使用--skip-active-record选项。 :)(可能不是直截了当但它的存在。

是的,Datamapper太棒了。 :)

答案 1 :(得分:1)

缺乏文档是一个巨大的问题。我已经开始使用DataMapper进行数据库处理,因此决定为我的数据实现Web界面。将DM纳入Rails,作为每个人的初学者,一直是一个巨大的挑战。因此,我很好奇,你知道任何显示DM / Rails使用的资源吗?当我不确定如何继续时,我希望能够看到一些东西。