ActiveRecord 7:在没有 ORM 模型类的情况下使用写入和读取角色

问题描述 投票:0回答:1

我正在开发一个使用 ActiveRecord 进行数据库访问的应用程序,但不使用模型类等 ORM 功能 - 查询全部使用文字 SQL 进行并调用

exec_query

我想使用 ActiveRecord 中对多个数据库的支持,以便有选择地选择使用与数据库的只读连接,但无法弄清楚如何在以下应用程序中实现此功能不使用模型类。

使用模型类(来自文档),我可以做出如下声明:

class MyBaseModel < ActiveRecord::Base self.abstract_class = true connects_to database: { writing: :primary, reading: :primary_replica } end
然后使用例如手动切换到阅读上下文:

ActiveRecord::Base.connected_to(role: :reading) do SomeChildModel.find id end
有没有一种方法可以声明用于读取角色的数据库连接(除了用于写入的默认连接之外),然后能够选择在特定上下文中使用该角色(对某个角色进行 

exec_query

 调用)连接对象),以便 ActiveRecord 能够在切换上下文时在后台正确管理连接池,就像上面配置的模型类一样?

ruby-on-rails ruby activerecord rails-activerecord
1个回答
0
投票
我认为你的问题包含了你的答案。您可以只执行块内的代码:

ActiveRecord::Base.connected_to(role: :reading) do # all code in this block will be connected to the reading role end
该块中没有任何内容需要代码来引用类或模型。

还有

来自文档的更多内容

在某些情况下,您可能希望应用程序连接到写入器或副本,而自动连接切换是不够的。例如,您可能知道,对于特定请求,您始终希望将请求发送到副本,即使您处于 POST 请求路径中也是如此。

为此,Rails 提供了connected_to 方法,该方法将切换到您需要的连接。

您需要做的就是在

database.yml

 文件中定义其他数据库,
根据文档

© www.soinside.com 2019 - 2024. All rights reserved.