Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::NotNullViolation-Mysql2列不能为null_Ruby On Rails_Testing_Rspec_Factory Bot - Fatal编程技术网

Ruby on rails ActiveRecord::NotNullViolation-Mysql2列不能为null

Ruby on rails ActiveRecord::NotNullViolation-Mysql2列不能为null,ruby-on-rails,testing,rspec,factory-bot,Ruby On Rails,Testing,Rspec,Factory Bot,我在通过FactoryBot创建记录时遇到了一个问题,这个问题只发生在测试环境中 在开发控制台上运行命令时: FactoryBot.create(:accounting\u pbs\u reservation,factor:3.0)(列factor也在工厂中定义,但我想明确地传递它) 然后它被正确执行和创建,但是当我在测试环境中运行命令时,它会打印错误: ActiveRecord::NotNullViolation: Mysql2::Error: Column 'factor' cannot

我在通过FactoryBot创建记录时遇到了一个问题,这个问题只发生在
测试
环境中

开发控制台上运行命令时:

FactoryBot.create(:accounting\u pbs\u reservation,factor:3.0)
(列
factor
也在工厂中定义,但我想明确地传递它)

然后它被正确执行和创建,但是当我在测试环境中运行命令时,它会打印错误:

ActiveRecord::NotNullViolation:
  Mysql2::Error: Column 'factor' cannot be null: 
INSERT INTO `accounting_pbs_reservations` (`start`, `rl_walltime`, `factor`) 
VALUES (1503468000, 1430000, 3.0)
即使出现因子

当我想在RSpec控制器中创建模型的实例时,也会出现这个问题

有人遇到过同样的问题吗?
测试
开发

因子
的数据库架构设置为

| Field  | Type   | Null | Key | Default | Extra          
| factor | double | NO   |     | 1       |                
FactoryBot定义非常简单:

FactoryBot.define do
  factory :accounting_pbs_reservation do
    factor { 1.0 }
    start { 1_503_468_000 }
    rl_walltime { 1_430_000 }
  end
end
发生错误的RSpec定义:

require 'rails_helper'

RSpec.describe AccountingPbsReservationsController, type: :controller do
  let(:valid_accounting_pbs_reservation) { FactoryBot.create(:accounting_pbs_reservation) }
  let(:valid_attributes) { FactoryBot.attributes_for(:accounting_pbs_reservation) }

...
    context 'when logged as admin' do
      login_admin
      it "returns a success response" do
        get :show, params: { id: valid_accounting_pbs_reservation.to_param         expect(response).to be_successful
      end
...


所以问题出在数据库触发器上


如果相关表中没有数据,触发器将
因子
值设置为null。相关的表是空的,因为当测试完成时,它会清除整个数据库。

可能会拒绝值3.0(可能只有int值??),然后保留空值。。只是猜测here@NikosM. 问题仍然存在,该列在数据库中设置为双精度。是否可以尝试使用另一个非隐式整数的值,例如3.123?是否可以运行ActiveRecord::Base.connection.execute“INSERT INTO
accounting\u pbs\u reservations
start
rl\u walltime
factor
)值(1503468000,143000,3.0)“并报告发生了什么?”因此我解决了问题。问题出现在数据库触发器上,如果相关表为空,则将值设置为null。而该表为空,因为在测试环境中,我清除了整个数据库。