我正在尝试创建一个 ActiveRecord 对象。但是我在创建它时收到此错误。
(0.1ms) ROLLBACK
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
关于这个问题的任何想法。
此问题发生在我的测试环境中,并且是由于每个测试都包装在自己的事务中而导致的。
我使用的是database_cleanergem,并对其进行了配置,以便在使用javascript的情况下不会将测试包装到事务中。所以为了解决这个问题,我在导致这个问题的每个规范中添加了js: true
。(即使这些规范实际上并没有使用javascript,这也是确保测试不会包装在事务中的最方便的方法。不过,我相信有更少的黑客式方法可以做到这一点)。
作为参考,下面是来自< code > spec/support/database_cleaner . Rb 的database _ cleaner配置:
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with :deletion
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :deletion
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
如果您不使用database_cleaner,那么测试被包装在事务中的原因可能是use_transactional_fixtures
选项在spec/spec_helper.rb
中设置为true
。尝试将其设置为false。
我遇到了这个问题。只需重新启动Rails服务器,它就可以工作了
其他答案都不能解决问题的根本原因。
问题在于,当Postgres引发异常时,它会毒害同一连接上的未来事务。
修复方法是回滚有问题的事务:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
参见参考文献。
ActiveRecord 是个轻量级的核心数据的活动记录。
Castle ActiveRecord框架是一个基于.NET的ORM框架,它实现了ActiveRecord设计模式。它本身就是基于NHibernate,只是封 装了NHibernate的大部分烦杂细节,对于需要持久化的类,只需继承自ActiveRecordBase类,并对类中的property赋予正确的 Attribute,而无需编写烦杂的mapping file。对于大型系统复杂的数据库逻辑,C
php-activerecord 是一个基于 ActiveRecord 设计模式 开发的开源PHP ORM库。它旨在大大简化与数据库的交互和减少手写 SQL 语句。它不同于其他的ORM,你不需要使用任何的代码生成器,也不费劲去手写、维护模型层的表映射文件。这个库的灵感来自Ruby on Rails ,因此它也借鉴Ruby on Rails 的想法和实现。另外,它也很容易地整合到ZF、CodeIgn
Use the ActiveRecord Integration facility if you want to benefit from the transaction management offered by the Automatic Transaction Management Facility and if you want to have the Container configur
问题内容: 我正在尝试从使用的模型中找到一个项目,但这给了我错误 全程跟踪 的第5行是 可能是什么问题?您可以在上面遮一下光吗?可能的解决方案是什么 问题答案: 它所需要的只是 在您的文件中
ActiveRecord 高级技巧 阿里云 Rails 项目调整 RDS MySQL 编码为 utf8mb4 的详细步骤 Rails 中的事务处理 MySQL 用 UUID 作为主键,实际使用中有什么问题 ActiveRecord Object Instantiate ActiveRecord 的三种数据预加载形式 - includes, preload, eager_load, Preload、
问题内容: 如果s有分数,假设标准位置,我如何获得用户排名: 我得到的独特印象是这将是数据库密集型的。我对此不太担心,但是显然,需要较少处理能力的解决方案才是赢家! 如果给两个具有相同点数的用户相同的排名太复杂了,我准备接受上面的用户1可能是排名3,而用户3可能是排名4。 编辑: 实际上,我是在单独的一堂课中存储gmy分数-因为每个事件都需要一定数量的分数。 关于如何使其更简洁的任何想法? 提前致
我正在尝试为我的Devise User模型添加一些额外的信息,如first_name、last_name、年龄、性别和城市。 当我填写注册表格并单击提交时,我会收到以下错误: SQLite3::ConstraintExc的:不是NULL约束失败:users.first_name:插入到用户(电子邮件,encrypted_password,created_at,updated_at)值 (?, ?,