续集与ActiveRecord一起陷入困境?

时间:2009-08-05 23:45:54

标签: ruby-on-rails ruby activerecord sequel

我正在考虑将Sequel用于我在Active Record中难以制作的一些毛茸茸的SQL。

在同一个项目中使用Sequel和ActiveRecord时,有什么需要注意的吗? (除了明显的续集等没有AR验证......)

2 个答案:

答案 0 :(得分:20)

免责声明:我是续集的维护者。

使用Rails时,续集很容易在ActiveRecord的旁边使用或代替ActiveRecord。您必须手动设置数据库连接,但除此之外,用法类似。您的续集模型文件在app / models中,与ActiveRecord模型类似。

设置数据库连接并不繁琐,通常在environment.rb中需要续集一行,并在每个环境文件(development.rb,test.rb,production.rb)中添加一行来执行以下操作:

DB = Sequel.connect(...)

如果你认为4行设置代码繁琐,那就太乏味了。

除非您要定位多个数据库,否则使用原始SQL通常不是问题。避免它的主要原因是冗长的冗长。 Sequel支持使用原始SQL至少和ActiveRecord一样容易,但在续集中,你需要使用原始SQL的时间通常很少。

BTW,Sequel附带了多个验证插件。 validation_class_methods插件类似于ActiveRecord验证,使用类方法。 validation_helpers插件使用实例级方法有一个更简单的实现,但两者都可以做大致相同的事情。

最后,我会说,如果你已经有了正常工作的ActiveRecord代码,除非你打算添加功能,否则将代码移植到Sequel可能不值得。

答案 1 :(得分:3)

就个人而言,我不会这样做。一开始,只需手动管理连接就会很乏味。我更倾向于,如果我认为Sequel是更强大的选择,那么推迟Rails 3.0(或者可能开始针对Edge Rails开发),如果Yehuda和他正在做他们的东西,那么切换ORM应该相当容易。至少比现在更像Merb了。

这是DHH对这个主题的看法(我不是说它应该被视为福音真理,但是,可以说,它可以从马的口中说出来):

  

但是不是Sql Dirty?

     

自从程序员开始以来   顶层的面向对象系统   关系数据库,他们是   努力解决如何问题   深入运行抽象。一些   对象关系映射器寻求   彻底根除SQL的使用,   争取面向对象的纯度   通过另一个OO强制所有查询   层

     

Active Record没有。它建成了   认为SQL既不是   肮脏也不坏,只是啰嗦   琐碎的案件。重点是   无需处理   这些琐碎案件中的冗长但是   保持表现力   硬查询 - SQL类型   创造优雅地处理。

     

因此,你不应该感到内疚   当你使用find_by_sql()来处理   无论是性能瓶颈还是硬性瓶颈   查询。开始使用   面向对象的接口   生产力和愉悦,以及下降   在表面下面   当你接近金属体验时   需要。

(引用被发现here,原始文本位于AWDRWR的p334,即“吊床”一书。

我认为这是合理的。

我们在谈论find_by_sql无法处理的事情吗?或者我们是在谈论execute无法处理的复杂的非SELECT内容?

我们可以看一下这些例子吗?