Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 验证失败:<;某物>;不包括在列表中(仅在测试中)_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 验证失败:<;某物>;不包括在列表中(仅在测试中)

Ruby on rails 验证失败:<;某物>;不包括在列表中(仅在测试中),ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,怎么可能呢? 在订单模式中: validates :pay_type_id, inclusion: PayType.ids 在测试中: patch :update, id: @order, order: { address: @order.address, email: @order.email, name: @order.name, pay_type_id: PayType.ids.first } assert_equal [], PayType.ids 测试结果: 1) Error: O

怎么可能呢? 在订单模式中:

validates :pay_type_id, inclusion: PayType.ids
在测试中:

patch :update, id: @order, order: { address: @order.address, email: @order.email, name: @order.name, pay_type_id: PayType.ids.first }
assert_equal [], PayType.ids
测试结果:

1) Error:
OrdersControllerTest#test_should_create_order:
ActiveRecord::RecordInvalid: Validation failed: Pay type is not included in the list
    app/controllers/orders_controller.rb:41:in `block in create'
    app/controllers/orders_controller.rb:40:in `create'
    test/controllers/orders_controller_test.rb:36:in `block (2 levels) in <class:OrdersControllerTest>'
    test/controllers/orders_controller_test.rb:35:in `block in <class:OrdersControllerTest>' 

2) Failure:
OrdersControllerTest#test_should_deny_update_if_not_logged_in [/home/eugenes/Dropbox/work/depot/test/controllers/orders_controller_test.rb:85]:
Expected: []
  Actual: [298486374, 980190962]
1)错误:
OrdersControllerTest#test(测试)应(创建)订单:
ActiveRecord::RecordInvalid:验证失败:列表中不包括付款类型
app/controllers/orders\u controller.rb:41:in`block in create'
app/controllers/orders\u controller.rb:40:in'create'
测试/控制器/命令\u控制器\u测试.rb:36:in'block(2级)in'
测试/控制器/命令\u控制器\u测试.rb:35:in'block in'
2) 失败:
OrdersControllerTest#test(测试)如果未登录(home/eugenes/Dropbox/work/depot/test/controllers/orders(测试)则应(拒绝)更新(rb:85):
预期:[]
实际:[298486374,980190962]
在开发环境中一切正常。
我做错了什么?

你可能会这样做

验证是否包含:pay_type_id,:in=>lambda{| | PayType.pluck(:id)}

至少通过这种方式,每次验证程序运行时,您都会对db进行新的查询,并获得最新的PayType ID集


ps.由于一个错误,包含了伪参数
——要进行后续操作,请检查

您可能可以执行以下操作

验证是否包含:pay_type_id,:in=>lambda{| | PayType.pluck(:id)}

至少通过这种方式,每次验证程序运行时,您都会对db进行新的查询,并获得最新的PayType ID集


ps.由于一个错误,包含了伪参数
——要进行后续操作,请检查

您是否有任何
支付类型
?我不知道包含的是Proc还是lambda,但我怀疑问题在于您的验证代码在类初始化时运行。因此,当测试框架启动时,没有PayType对象。然后包含(可能)是“[]“。相反,您可能希望使用proc,以便验证始终在知道最新薪资类型集的情况下运行。是的,当然,我有2种薪资类型。我编辑了问题,现在您可以看到薪资类型存在。您是否有任何
薪资类型
?我不知道包含的内容是否可以是proc或lambda,但我怀疑问题是您的验证代码r。”在类初始化时取消。因此,当测试框架启动时,没有PayType对象。然后包含(可能)是“[]”。相反,您可能希望使用proc,以便验证始终在知道最新的PayType集的情况下运行。是的,当然,我有2种pay类型。我编辑了问题,现在您可以看到pay类型存在。经过一些调查,我发现它与proc:validates\u inclusion\u of:pay\u type\u id一起工作,在:proc{PayType.ids}经过一些调查,我发现它与proc:validates\u inclusion\u of:pay\u type\u id一起工作,在:proc{PayType.ids}