我需要在我的rails应用程序上执行一些自定义查询,并且想知道哪种方法更好:
results = ActiveRecord::Base.connection.execute(query)
或者
Model.find_by_sql(query)
一直在阅读文档,但没有真正了解它们的表现。
答案 0 :(得分:4)
execute
是一种低级方法。它返回数据库驱动程序返回的任何内容,例如Mysql2::Result
的实例。您可以使用此
find_by_sql
返回相应类的ActiveRecord对象数组,这些对象是根据结果构建的(因此传递一个不产生合适结果集的查询是没有意义的)。
中途宿舍是连接上的方法,例如select_all
,select_values
等。这些方法不会创建活动记录对象,但会将原始驱动程序结果转换为数组,哈希,字符串等