Tag: 事务

Rails交易

我正在尝试使用ActiveRecord::Base.transaction 。 我认为使用Rails 1.2.6和mysql 5.0默认情况下回滚不起作用。 更多地玩它我发现在mysql连接中autocommit没有设置为0。 问题: 1)如何禁用所有连接的rails中的自动提交? 2)它是否会对其他不必交易的代码产生负面影响?

渲染无法在rescue_from ActiveRecord :: Rollback方法中呈现正确的模板

我正在为电子商务网站构建结帐页面,我有一个相当长的事务,它创建了一个新的用户模型和一个新的订单模型。 我将这些模型的创建包装在一个事务中,这样如果一个模型的validation失败,另一个不会在数据库中闲逛。 这是我的OrdersController中的修剪代码: rescue_from ActiveRecord::Rollback, with: :render_new def render_new render action: ‘new’ end ActiveRecord::Base.transaction do @user = User.new params[:user] unless @user.save raise ActiveRecord::Rollback end //More stuff … @order = Order.new params[:order] … unless @order.save raise ActiveRecord::Rollback end end 我看到的错误是这样的: 缺少模板订单/创建,应用/创建{:locale => [:en],:formats => [:html],:handlers => [:erb,:builder,:coffee]} 我很困惑为什么它试图渲染模板命令/创建和应用程序/创建而不是渲染订单/新。 有没有更好的方法来强制事务失败,以便发生回滚?

Rails 3,锁定拍卖类型引擎上的表格

我正在Rails 3中构建类似拍卖的系统(使用PostgreSQL作为数据库)。 想象一下,你有一个产品。 产品有很多出价。 我担心当两个不同的用户同时点击“出价”时会发生什么(假设我至少有2个应用服务器,并且他们同时点击服务器)。 我有两个可接受的行为: 其中一个“胜利”,另一个收到错误消息 其中一个“胜利”,另一个出价是下一个(每个出价加上0.01欧元的价格)。 因此,重复所有并​​发出价直到创建 所以我的问题是:如何在Rails 3上处理这个问题? 我认为使用常规交易还不够,或者是这样吗?

Ruby On Rails的事务操作

我在控制器内部有一个复杂的动作,它对数据库执行几个更新查询。 如何在不进行任何结构重构的情况下使此操作像事务一样 ?

Capybara + Selemium:如何在集成测试代码中初始化数据库并使其在Rails应用程序中可见?

配置:使用RSpec,Capybara,Selemium驱动程序,SQLite数据库对Rails项目进行集成测试。 情况:我很少与Capybara和默认的rack_test驱动程序进行集成测试。 他们直接在数据库中创建用户注册(对于Devise gem)。 然后他们像用户一样使用Capybara DSL登录并测试场景。 问题:我尝试将驱动程序更改为Selenium以测试JavaScript代码。 现在测试失败,因为应用程序没有看到测试创建的用户注册。 调查:看起来Selenium驱动程序与转换的工作方式不同,因此在测试中所做的更改在Web应用程序中是不可见的。 可能的解决方案包括: config.use_transactional_fixtures = false DatabaseCleaner.strategy = :truncation

Rails postgresql如何将事务隔离级别设置为可序列化

我有一个评论模型,属于一个主题模型。 在Comment模型中,我有一个before_create回调 def on_create Topic.transaction(:require_new => true) do Topic.connection.execute(‘SET TRANSACTION ISOLATION LEVEL SERIALIZABLE’) self.topic.increment!(:comment_counter) if conditions end end 问题是我得到一个ActiveRecord::StatementInvalid: PGError: ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query 。 有没有其他方法来设置事务隔离级别?

如何使用ruby mysql2执行事务

我已经开始使用mysql2 gem了。 我试图找出一些基本的东西 – 其中之一是如何显式执行事务(对于批处理操作,如多个INSERT / UPDATE查询)。 在旧的ruby-mysql ,这是我的方法: client = Mysql.real_connect(…) inserts = [ “INSERT INTO …”, “UPDATE .. WHERE id=..”, # etc ] client.autocommit(false) inserts.each do |ins| begin client.query(ins) rescue # handle errors or abort entirely end end client.commit 我在文档中找不到多少 – 如何用mysql2完成相同的操作?

为什么Rails忽略(伪)嵌套事务中的回滚?

根据文档ActiveRecord :: Transactions :: ClassMethods ,非新嵌套事务将忽略回滚。 来自文档: User.transaction do User.create(username: ‘Kotori’) User.transaction do User.create(username: ‘Nemu’) raise ActiveRecord::Rollback end end raise ActiveRecord::Rollback被忽略,因为它在子事务中(或者更确切地说,它仍然在父事务中而不是它自己的事务中)。 我不明白为什么两个都会忽略回滚调用? 我可以看到,因为子’事务’实际上不是一个事务,它不会回滚’Nemu’块,但为什么它不会触发父事件的回滚? 子事务是否以某种方式隐藏了回滚? 换句话说,为什么似乎无法从嵌套子项中回滚父事务?