有没有办法挂钩到ActiveRecord连接创建?每当连接刚刚创建时,我都想运行一些代码。ActiveRecord数据库连接的回调?
我觉得它可能是一种在连接上设置MySQL变量的方法,因为database.yml中的“变量”对我来说似乎不起作用。 (How to turn off MySQL strict mode in Rails)
有没有办法挂钩到ActiveRecord连接创建?每当连接刚刚创建时,我都想运行一些代码。ActiveRecord数据库连接的回调?
我觉得它可能是一种在连接上设置MySQL变量的方法,因为database.yml中的“变量”对我来说似乎不起作用。 (How to turn off MySQL strict mode in Rails)
ConnectionAdapter
定义了两个回调:checkout
(连接)和:checkin
(断开连接)。你可以用它为特定适配器
ActiveRecord::ConnectionAdapters::MysqlAdapter.set_callback :checkout, :after do
raw_connection.set_your_variables ...
end
或者你可以使用ActiveRecord::Base.connection.class
对于任何适配器database.yml
请注意,从Rails 5.2开始,这个回调在连接建立后不是一次触发,而是在连接池的每次检出时触发(与在处理每个HTTP请求之前一样)。此外,你不能从它调用模型方法(你会得到无尽的递归)。 – Envek
目前也声明,如果你需要配置你的模型连接已建立和列信息为后检索,您可以在模型中重新定义load_schema!
类方法。
请参阅:https://github.com/rails/rails/pull/31681#issuecomment-357113030
这是针对特定模型还是一般? –