作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Note: This is a follow up question to Optimising Rspec Tests to Avoid Repeating Complex Setup Proceedures
def before_callback
start_transaction # Start the transaction
# Create/Update some records
end
def after_callback
rollback_transaction # Rollback changes from before_callback and do_stuff
end
def do_stuff
before_callback
# Do some stuff
after_callback
end
do_stuff
transaction do .. end
轻松解决。和一些重构,但在上下文中要记住
do_stuff
是我真的不想弄乱的外部插件的一部分。有没有办法做一些类似于我刚刚在 Rails 中描述的事情?
最佳答案
对于粗略的快速解决方案,您可以直接在数据库连接上执行所需的 SQL 命令:
def start_transaction
ActiveRecord::Base.connection.execute("BEGIN")
end
def rollback_transaction
ActiveRecord::Base.connection.execute("ROLLBACK")
end
transaction
的来源方法可能会给你一些关于如何以更精细的方式解决这个问题的想法。
ActiveRecord::ConnectionAdapters::DatabaseStatements
中找到它
lib/active_record/connection_adapters/abstract/database_statements.rb
)
关于ruby-on-rails - 不使用区 block 回滚交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675128/
我是一名优秀的程序员,十分优秀!