Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用RubyonRails而不使用ActiveRecord_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 使用RubyonRails而不使用ActiveRecord

Ruby on rails 使用RubyonRails而不使用ActiveRecord,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我一直在考虑在我的web项目中从使用PHP切换到RubyonRails,我最关心的一件事是使用ActiveRecordforRails。在我看来,使用ActiveRecord是非常受鼓励的,而直接编写SQL似乎是不受欢迎的。在看过几个项目之后,我还没有看到一个在其中实际使用SQL的项目 我还不喜欢ActiveRecord,主要是因为它需要学习一些似乎不如直接SQL强大的东西,例如,有没有一种简单的方法可以通过ActiveRecord使用group by和having子句进行嵌套查询,或者我必须跳

我一直在考虑在我的web项目中从使用PHP切换到RubyonRails,我最关心的一件事是使用ActiveRecordforRails。在我看来,使用ActiveRecord是非常受鼓励的,而直接编写SQL似乎是不受欢迎的。在看过几个项目之后,我还没有看到一个在其中实际使用SQL的项目

我还不喜欢ActiveRecord,主要是因为它需要学习一些似乎不如直接SQL强大的东西,例如,有没有一种简单的方法可以通过ActiveRecord使用group by和having子句进行嵌套查询,或者我必须跳转才能这样做


有没有人使用过没有ActiveRecord的Rails?如果是这样,您的经验是什么?

如果您不想使用ActiveRecord,您不必这样做,如果您愿意,您可以在模型中定义纯sql。按sql查找(“选择任何内容”)

其他人在Rails应用程序中使用ORM肯定有很好的理由:

特别是在Rails3中,ORM是可插入的——您可以轻松地使用DataMapper或Sequel而不是ActiveRecord

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

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

三个字:这里是龙

如果你偏离了“正轨”行事的道路,那么你就会遇到拥有难以想象的力量和狡猾的敌人。一开始,你会想:“哦,呵呵,我是按我的方式做的,我是不是很棒?”。那你就会累了。甚至筋疲力尽。可怜的是,在你挣扎的过程中,你会看到所有使用Active Record的s,并想知道为什么你选择冒险走一条充满厄运和黑暗的道路,这会让Chuck Norris尿裤子

请不要偏离活动记录。它只是在这里帮助你,而不是阻碍你。如果您希望编写自己的查询,那么有一个
find\u by\u sql
方法,或者更低的
Model.connection.execute
方法。然而,这些武器只应在极其迫切的需要时使用,就像核武器一样


如果您根本不想使用活动记录,那么我鼓励您查看或

DataMapper提供了与Active Record大致相同的功能,有些人更喜欢这种语法。作为一点琐事:它是首批与Rails3兼容的宝石之一

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


我再次恳求:不要偏离已走过的道路,否则你会想挨打。

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


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

您能为我们提供您正在使用的查询作为示例吗?我不是说任何特定的查询,而是更复杂的查询。使用ActiveRecord、Sequel或Datamapper ORM的最大优势是可移植性。如果您使用ORM,您可以经常更改连接DSN或URL,并在不同的DBM上工作,而无需更改代码。编写SQL直接引诱我们使用特定于DBM的命令,这会降低可移植性。ORM让我们可以灵活地决定何时直接使用SQL,还是依赖于它们生成好代码的能力。是的,我确实在PHP中对查询进行了参数化……但我使用的大多数PHP框架让我可以灵活地使用ActiveRecord或straight SQL编写查询。我更担心的是,ActiveRecord无法完成一些我想要的更高级的事情,然后被困在使用特定的范例中。感谢您的接受,但Ryan的回答远比我的完整,而且是非常好的建议。看看我每天凌晨3点在Rails核心邮件中看到Ryan Bigg的名字(来自帮助他人),我建议你记住他的话然而,如果你正试图使用一个由许多旧应用程序共享的现有遗留数据库,而这些旧应用程序的结构显然不适合ActiveRecord,那该怎么办?@GregoryHigley,那么你注定要失败。“Sequel恢复了我对Ruby的信心。这真是太神奇了。我多年来一直希望的O/RM。”——DataMapper的创建者Sam Smoot