提问人:Douglas Greenshields 提问时间:10/10/2023 更新时间:10/11/2023 访问量:57
ActiveRecord 7:在没有 ORM 模型类的情况下使用写入和读取角色
ActiveRecord 7: using writing and reading roles without ORM model classes
问:
我正在开发一个使用 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
有没有办法声明用于读取角色的数据库连接(除了用于写入的默认连接之外),然后能够选择在特定上下文中使用该角色(对连接对象进行调用),以便 ActiveRecord 能够在切换上下文时在后台正确管理连接池, 如上所述配置的模型类可以吗?exec_query
答:
0赞
Chiperific
10/11/2023
#1
我想你的问题包括你的答案。你可以在块内执行代码:
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
评论
0赞
Douglas Greenshields
10/19/2023
感谢您的@Chiperific - 我的问题似乎是我似乎没有办法在角色和数据库之间建立可以在模型类中设置的映射,即.我试过只是调用,但没有效果。connects_to(database: { writing: :writing, reading: :reading })
connects_to
ActiveRecord::Base
评论