【发布时间】:2010-04-20 22:04:11
【问题描述】:
如何在 Rails 的 ActiveRecord 中禁用事务?我有一个特定的情况,我希望他们离开我似乎找不到任何有用的东西。有没有可能?
【问题讨论】:
标签: ruby-on-rails ruby database activerecord
如何在 Rails 的 ActiveRecord 中禁用事务?我有一个特定的情况,我希望他们离开我似乎找不到任何有用的东西。有没有可能?
【问题讨论】:
标签: ruby-on-rails ruby database activerecord
穷人的“不交易”
# Force the loading of AR stuff
ActiveRecord::Base.connection.execute('SELECT 1')
# Remove transactions
ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do
def begin_db_transaction
end
def commit_db_transaction
end
end
【讨论】:
与丹尼尔的回答类似,但我发现我还必须禁用保存点才能正常工作。在 Rails 3.2.22.2 上测试。
ActiveRecord::ConnectionAdapters::Mysql2Adapter.class_eval do
def begin_db_transaction
end
def commit_db_transaction
end
def create_savepoint
end
def rollback_to_savepoint
end
def release_savepoint
end
end
【讨论】:
transaction 是 ActiveRecord::Base 上的一个类方法,所以你可以这样做:
Model.transaction do
...
end
或者如果您更喜欢不使用特定型号:
ActiveRecord::Base.transaction do
...
end
这也可能取决于您使用的数据库,我确定它适用于 mysql 但不确定其他数据库。
【讨论】: