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

时间:2016-06-28 14:22:10

标签: sql ruby-on-rails postgresql activerecord

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

results = ActiveRecord::Base.connection.execute(query)

或者

Model.find_by_sql(query)

一直在阅读文档,但没有真正了解它们的表现。

1 个答案:

答案 0 :(得分:4)

execute是一种低级方法。它返回数据库驱动程序返回的任何内容,例如Mysql2::Result的实例。您可以使用此

执行任何类型的查询

find_by_sql返回相应类的ActiveRecord对象数组,这些对象是根据结果构建的(因此传递一个不产生合适结果集的查询是没有意义的)。

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