我正在考虑将Sequel用于我在Active Record中难以制作的一些毛茸茸的SQL。
在同一个项目中使用Sequel和ActiveRecord时,有什么需要注意的吗? (除了明显的续集等没有AR验证......)
答案 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内容?
我们可以看一下这些例子吗?