有人能向我解释一下ActiveRecord::Base.connection(某些表)和ActiveRecord::Base.connecton.execute(某些表)之间的区别吗?谢谢!
发布于 2022-08-09 06:03:06
您的问题有点不清楚,因为这两种方法都不希望使用table_name作为参数。
但是通常情况下,ActiveRecord::Base.connection返回ActiveRecord::Base类的当前数据库连接,该连接可用于运行低级数据库查询。而您的第二个示例ActiveRecord::Base.connecton.execute(sql_query)使用了连接,实际上对数据库执行了一个SQL查询。
来自ActiveRecord::ConnectionHandling#connection的文档
connection()返回当前与类关联的连接。这也可以用来“借用”连接来做与任何特定活动记录无关的数据库工作。
来自ActiveRecord::ConnectionAdapters::DatabaseStatements#execute的文档
execute(sql, name = nil)在此连接的上下文中执行SQL语句,并从连接适配器返回原始结果。注意:根据数据库连接器的不同,此方法返回的结果可能是手动管理内存。考虑使用exec_query包装器。
发布于 2022-08-09 05:17:02
ActiveRecord::Base.connection方法不接受任何参数,并返回当前关联类的连接。
# File activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb, line 90
def connection
self.class.connection
endActiveRecord::Base.connection.execute获取原始SQL并在当前为模型建立的连接上执行。
有关更多细节,请参阅这
https://stackoverflow.com/questions/73285709
复制相似问题