Ruby on Rails中执行原生SQL报错求助:如何正确编写原生SQL?
问题解决思路
核心原因是你用错了数据库连接:
Sf::Program.count用的是该模型专属的数据库连接(对应Salesforce的数据库/schema)ActiveRecord::Base.connection调用的是Rails默认的主数据库连接,和模型用的不是同一个,自然找不到salesforce.program__c表
解决方法
方法1(推荐):直接用模型的连接执行原生SQL
直接调用Sf::Program模型的connection对象来执行查询,和执行.count时用的是同一个连接,肯定能找到表:
Sf::Program.connection.exec_query('SELECT COUNT(*) FROM "salesforce"."program__c"')
方法2:切换到对应数据库连接后执行
如果一定要用ActiveRecord::Base的连接,需要先切换到Salesforce对应的数据库配置(假设你的database.yml里有:salesforce这个连接项):
# 切换到Salesforce连接 ActiveRecord::Base.establish_connection(:salesforce) # 执行查询 ActiveRecord::Base.connection.exec_query('SELECT COUNT(*) FROM "salesforce"."program__c"') # 用完记得切回主连接,避免影响后续操作 ActiveRecord::Base.establish_connection(:primary)
这种方法要注意切回主连接,不然后续操作会跑到Salesforce数据库上,容易出问题。
内容的提问来源于stack exchange,提问作者Fernando Maymone
相关产品推荐
相关产品推荐

