有沒有辦法掛鉤到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
這是針對特定模型還是一般? –