Whi*_*ger 1 ruby postgresql ruby-on-rails
我正在使用 RoR 版本 4.2.3,并且我知道我可以设置事务的隔离级别。但是,我在哪里定义设置所有事务的隔离级别呢?所以我只需要定义一次就不用担心了?
我使用 postgreSQL 作为我的数据库
似乎没有全局隔离选项,因此您有四个选项:
transaction实现,以便它选择您想要的隔离级别。(猴子补丁是不可取的)isolation在整个应用程序中使用正确的级别。
SomeModel.transaction(isolation: :read_committed)
扩展ActiveRecord并创建您自己的自定义交易方法。
正如评论所述 - 您可以编辑数据库配置中的默认隔离级别。对于 postgres 来说就是这个
示例代码:
#lib/activerecord_extension.rb
module ActiveRecordExtension
  extend ActiveSupport::Concern
  module ClassMethods
    def custom_transaction
      transaction(isolation: :read_committed) do
        yield
      end
    end
  end
end
ActiveRecord::Base.send(:include, ActiveRecordExtension)
然后在你的初始化器中:
#config/initializers/activerecord_extension.rb
require "active_record_extension"
之后您可以使用:
MyModel.custom_transaction do
  <...>
end
将来,这将允许您在一处更改隔离级别。
| 归档时间: | 
 | 
| 查看次数: | 1475 次 | 
| 最近记录: |