ruby ActiveRecord 7:使用写和阅读角色而不使用ORM模型类

iecba09b  于 2023-10-17  发布在  Ruby
关注(0)|答案(1)|浏览(80)

我正在开发一个应用程序,它使用ActiveRecord进行数据库访问,但不使用ORM功能,如模型类-查询都是用文字SQL和调用exec_query
我想使用support for multiple databases in 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能够在切换上下文时在后台正确管理连接池,就像上面配置的模型类一样?

eh57zj3b

eh57zj3b1#

我认为你的问题包括你的答案。你可以在代码块中执行代码:

ActiveRecord::Base.connected_to(role: :reading) do
  # all code in this block will be connected to the reading role
end

没有任何东西需要该块中的代码来引用类或模型。
更多来自docs:
在某些情况下,您可能希望应用程序连接到writer或副本,而自动连接切换是不够的。例如,您可能知道,对于特定的请求,您总是希望将请求发送到副本,即使您处于POST请求路径中也是如此。
为此,Rails提供了一个connected_to方法,该方法将切换到您需要的连接。
根据文档,您需要做的就是在database.yml文件中定义其他数据库。

相关问题