ActiveRecord::Base.connection 和 find_by_sql 之间的区别

nto*_*ier 1 sql postgresql activerecord ruby-on-rails

我需要在我的 Rails 应用程序上执行一些自定义查询,并且想知道哪种方法更好:

results = ActiveRecord::Base.connection.execute(query)
Run Code Online (Sandbox Code Playgroud)

或者

Model.find_by_sql(query)
Run Code Online (Sandbox Code Playgroud)

一直在阅读文档,但并没有真正了解它们的性能。

Fre*_*ung 5

execute是一种低级方法。它返回数据库驱动程序返回的任何内容,例如Mysql2::Result. 您可以用它执行任何类型的查询

find_by_sql返回相应类的 ActiveRecord 对象数组,该数组是根据结果构造的(因此传递不能生成合适结果集的查询是没有意义的)。

中途之家是连接上的方法select_allselect_values例如 等。这些方法不会创建活动记录对象,但会将原始驱动程序结果转换为数组、散列、字符串等。