16

我需要以跨數據庫(SQLite,PostgreSQL,MySQL至少)的方式以每個事務的方式管理事務隔離級別portable如何使用ActiveRecord連接設置事務隔離級別? [推薦寶石]

能否請您推薦一個寶石從而提高ActiveRecord的數據庫連接適配器,允許?

我知道我可以做手工,這樣的:

User.connection.execute('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE') 

...但我希望是這樣的:

User.isolation_level(:serializable) do 
    # ... 
end 

回答

18

此功能是通過自身的ActiveRecord支持:

MyRecord.transaction(isolation: :read_committed) do 
    # do your transaction work 
end 

它支持ANSI SQL隔離級別:

  • :read_uncommitted
  • :read_committed
  • :repeatable_read
  • :serializable

此方法可用since Rails 4,OP在提出問題時無法使用。但是對於任何體面的現代化Rails應用程序來說,這都是應該走的路。