我正在考虑将Sequel用于我发现在 Active Record 中难以制作的一些毛茸茸的 SQL。
在同一个项目上使用 Sequel 和 ActiveRecord 时有什么需要注意的吗?(除了那些显而易见的东西,比如续集中没有 AR 验证等......)
我正在考虑将Sequel用于我发现在 Active Record 中难以制作的一些毛茸茸的 SQL。
在同一个项目上使用 Sequel 和 ActiveRecord 时有什么需要注意的吗?(除了那些显而易见的东西,比如续集中没有 AR 验证等......)
免责声明:我是 Sequel 的维护者。
在使用 Rails 时,Sequel 很容易与 ActiveRecord 一起使用或代替 ActiveRecord。您必须手动设置数据库连接,但除此之外,用法类似。您的 Sequel 模型文件位于 app/models 中,并且与 ActiveRecord 模型类似。
建立数据库连接并不乏味,通常需要在 environment.rb 中的一行来要求续集,并且在每个环境文件(development.rb、test.rb、production.rb)中的一行来执行以下操作:
DB = Sequel.connect(...)
因此,如果您认为 4 行设置代码很乏味,那只会很乏味。
除非您针对多个数据库,否则使用原始 SQL 通常不是问题。避免它的主要原因是增加了冗长。Sequel 支持使用原始 SQL 至少与 ActiveRecord 一样容易,但是在 Sequel 中需要使用原始 SQL 的时间通常相当少。
顺便说一句,Sequel 附带多个验证插件。validation_class_methods 插件类似于 ActiveRecord 验证,使用类方法。validation_helpers 插件使用实例级方法有一个更简单的实现,但两者都可以做大致相同的事情。
最后,我要说的是,如果您已经拥有可以满足您需求的 ActiveRecord 代码,那么除非您计划添加功能,否则将代码移植到 Sequel 可能不值得。
就个人而言,我不会这样做。首先,仅手动或多或少地管理连接将是乏味的。如果我觉得 Sequel 是更强大的选择,我会更倾向于推迟 Rails 3.0(或者可能开始针对 Edge Rails 进行开发),如果 Yehuda 和 co 做得对的话,切换 ORM 应该相当容易. 至少比现在更像 Merb。
这是 DHH 对这个主题的看法(我并不是说它应该被视为福音真理,但可以这么说,来自马的嘴):
但是 Sql 不脏吗?
自从程序员开始在关系数据库之上分层面向对象系统以来,他们一直在努力解决抽象运行多深的问题。一些对象关系映射器试图完全消除 SQL 的使用,通过强制所有查询通过另一个 OO 层来争取面向对象的纯粹性。
Active Record 没有。它建立在 SQL 既不脏也不坏,只是在琐碎情况下冗长的概念之上。重点是消除在那些琐碎的情况下处理冗长的需要,但保持硬查询的表现力——创建 SQL 类型是为了优雅地处理。
因此,当您使用 find_by_sql() 处理性能瓶颈或硬查询时,您不应该感到内疚。开始使用面向对象的界面来提高生产力和乐趣,并在需要时深入表面以获得接近金属的体验。
(引用在这里找到,原文在“吊床”书AWDRWR 的p334上)。
我认为这是合理的。
我们是在谈论find_by_sql
无法处理的事情吗?还是我们在谈论execute
无法处理的复杂的非 SELECT 东西?
我们可以看看任何例子吗?