本来要问的是下面这一段,自己看完文档明白了。
引用
#before do it: a.name="a"
a = A.find(1)
a.name="b"
a.save
上面这段代码在普通的rb文件里,是可以正常更新数据的。
在test.rb里,每次执行完以后数据都没有更新,也就是说rollback事务了。
在test_helper.rb里是这样说的:
#Transactional fixtures accelerate your tests by wrapping each test method
# in a transaction that's rolled back on completion. This ensures that the
# test database remains unchanged so your fixtures don't have to be reloaded
# between every test method. Fewer database queries means faster tests.
修改 self.use_transactional_fixtures = false 就可以更新数据了。
但还有另外一个问题,就是说我手工控制事务的回滚和提交该如何做呢?
现在是这样用事务:
ActiveRecord::Base.transaction do
SELECTAA
UPDATEAA
SELECTBB
UPDATEBB
rescue
ensure
end
我想实现的是,当查找到BB的时候,由于某种原因需要回滚整个事务。但是在上面的语句中,是只有在出现异常的时候才回滚的吧?如果在里面加上raise "xxxx",也可以实现回滚。但是除此之外,有没有可以手工控制的语句呢?
就像在TEST中,可以设置事务是否自动回滚一样。
后记:cookoo的回复
ActiveRecord::Base.connection.begin/commit/rollback_db_transaction
再测试一下事务嵌套效果:
ActiveRecord::Base.connection.begin_db_transaction
ActiveRecord::Base.transaction do
end
ActiveRecord::Base.connection.commit_db_transaction
执行结果是:begin begin commit commit
反过来:
ActiveRecord::Base.transaction do
ActiveRecord::Base.connection.begin_db_transaction
ActiveRecord::Base.connection.commit_db_transaction
end
执行结果是:begin begin commit commit
但是在_test.rb中加入
ActiveRecord::Base.transaction do
end
语句时,却仅执行外围的begin/commit/rollback,上面这条transaction do end中根本没有开启事务语句。相当于被外围接管了。
分享到:
- 2006-12-28 10:30
- 浏览 4235
- 评论(2)
- 论坛回复 / 浏览 (2 / 5018)
- 查看更多
相关推荐
nestive, 一个更好的Rails 嵌套可以继承布局插件 Nestive 用于 Rails的嵌套布局帮助器Nestive为你的Rails 应用程序添加强大的布局和视图助手。 它类似于嵌套布局技术,已经在 Rails 指南中记录,并且在许多其他嵌套...
Ajax、Prototype和Scriptaculous等JavaScript代码库和RJS,Session管理、用户登录和认证系统,XML和ActiveResource,后台处理和ActionMaile,测试和specs(包括RSpec on Rails和Selenium),安装、管理、编写插件,...
ruby on rails对mongodb的操作ruby on rails对mongodb的操作ruby on rails对mongodb的操作ruby on rails对mongodb的操作
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
Simple Form - 轻松处理Rails表单
当我们需要在 rails 中创建嵌套表单时,我们使用了nested_form gem。 但是如果你使用 AngularJS 作为前端,那么你就不能使用它。 当您希望嵌套表单使用 AngularJS 时,您需要编写自己的代码。 在这个应用程序中,我...
Rails的嵌套注释5 使用Vagrant ,请在终端中执行vagrant up命令,完成工作后,请使用vagrant ssh命令vagrant ssh到虚拟机。 $ vagrant up $ vagrant ssh Ubuntu将安装在虚拟机上。使用cd /vagrant命令移动目录后...
Rails 3.2:嵌套形式的演示,第3部分:我们正在开始进攻!
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...
Ruby和Rails高效的Kafka处理框架_Ruby_下载.zip
一个用Ruby on Rails搭建的图片分享的网站项目.完整源代码
本资源是参照rails敏捷开发第四版书中的例子,rails的版本是rails3.2.6
Bootstrap 3 和 Rails 4(样例用的是Ruby 2.1.1,Rails 4.1.4) Table of Contents Preface 1 Chapter 1: Introducing Web Application Development in Rails 7 Why Bootstrap with Rails? 8 Setting up a Todo ...
adminlte-rails, AdminLTE Rails gem 将AdminLTE主题与 Rails 资产管道集成 AdminLTE Rails gem AdminLTE 是后端的高级 Bootstrap 主题。英镑 AdminLTE Rails gem 与 Rails 资产管道集成了英镑AdminLTE主题。安装将...
中文世界唯一一本Rails 4.0.0 + Ruby 2.0.0 的自學書籍
rails文档 rails api 英文
使用Aptana+Rails开发Rails Web应用 有Aptana的安装配置等等,中文