16

我一直在考虑在我的 Web 项目中从使用 PHP 切换到 Ruby on Rails,而我最关心的一件事是使用 ActiveRecord for Rails。在我看来,强烈鼓励使用 ActiveRecord,而直接编写 SQL 似乎不受欢迎。在查看了几个项目之后,我还没有看到一个实际使用 SQL 的项目。

我还没有在 ActiveRecord 上出售,主要是因为它需要学习一些看起来不像直接 SQL 强大的东西,例如,有没有一种简单的方法可以使用 group by 和有 ActiveRecord 的子句进行嵌套查询或 will我必须跳圈才能做到这一点?

有没有人在没有 ActiveRecord 的情况下使用过 Rails?如果是这样,你这样做的经验是什么?

4

4 回答 4

49

三个字:这里是龙

走“The Rails Way”做事的道路,你会遇到难以想象的强大和狡猾的敌人。一开始,你会想“哦,呵呵,我是按我的方式做的,我是不是很棒?”。那你会累的。甚至筋疲力尽。孤独地,在你挣扎的过程中,你会看到所有正在使用 Active Record 的酷宝石,并想知道为什么你选择冒险走上一条充满厄运和忧郁的道路,这会让 Chuck Norris 尿裤子。

请不要偏离 Active Record。它只是在这里帮助你,而不是阻碍你。如果您想编写自己的查询,那么有一种find_by_sql方法,或者甚至更低的Model.connection.execute方法。然而,这些只能在非常迫切的需要时使用,就像核武器一样。

如果您根本不想使用 Active Record,那么我鼓励您查看DataMapperMongoid

DataMapper 提供了许多与 Active Record 相同的功能,并且已知有些更喜欢这种语法。顺便说一句:它是与 Rails 3 兼容的首批 gem 之一。

另一方面,Mongoid 用于 MongoDB 数据库,其他一些人也喜欢它。

我再次恳求:不要偏离人迹罕至的地方,免得你想挨打。

于 2010-12-18T10:35:41.737 回答
8

如果您不想使用 ActiveRecord,您不必并且可以在您的模型中定义纯 sql,如果您愿意的话。find_by_sql('选择什么')

于 2010-12-18T08:56:19.043 回答
4

您可以使用 DataMapper。在编写了一年多的 Rails 应用程序和工具之后,我强烈推荐使用 ActiveRecord。即使您只使用过 Model.find_by_sql("使用可能随时间变化的字段的容易出错的手写 sql") 而不是 Model.find_by_last_name("Smith")

许多聪明人在 ActiveRecord 和 ARL 上花费了很多时间。我请求你利用他们的工作。

于 2010-12-18T14:32:30.567 回答
3

其他人必须有充分的理由在他们的 Rails 应用程序中使用 ORM。:)

特别是在 Rails 3 中,ORM 是可插拔的——您可以轻松地使用 DataMapper 或 Sequel 来代替 ActiveRecord。

在任何情况下,模型都是任何 MVC 框架的重要(并且非常强大)的一部分。很多业务逻辑都放在模型中——“胖模型”是一种推荐的开发方式。

现有 ORM 的另一个优点是它们实际上允许(但不鼓励)您手动编写 SQL - 如果您愿意,您可以自由地手动编写所有查询。但即便如此,我还是建议您将查询参数化并让库插入您的参数(您在 PHP 中也这样做,不是吗)?

于 2010-12-18T09:10:28.607 回答