Rails 7多数据库场景下如何指定数据库执行原生MySQL语句?
解决Rails 7多数据库下执行原生SQL指定数据库的问题
在Rails 7中,要指定特定数据库执行原生SQL,你需要使用ActiveRecord::Base.connected_to方法并传入database参数,而非仅依赖role参数。
正确用法示例
假设你的database.yml中配置了多个数据库(比如主库primary和分析库analytics),可以这样指定数据库执行原生语句:
ActiveRecord::Base.connected_to(database: :analytics) do # 此处的execute会使用analytics数据库连接 result = ActiveRecord::Base.connection.execute("SELECT COUNT(*) FROM user_behavior") puts result.first[0] end
关键说明
role: :reading用于读写分离场景的角色配置,无法用来切换不同的数据库实例,因此不满足你的需求。- 如果项目中有对应目标数据库的模型(比如关联
analytics数据库的AnalyticsRecord模型),也可以直接通过模型的连接执行SQL,无需包裹代码块:AnalyticsRecord.connection.execute("SELECT * FROM some_table") - 注意
database参数的值必须和database.yml中配置的数据库键名完全一致(比如上述例子中的:analytics)。
内容的提问来源于stack exchange,提问作者perfect_crimes
相关产品推荐
相关产品推荐

