gpt4 book ai didi

ruby-on-rails - 将 Rails 从 v4 升级到 v5 后,带有枚举的测试用例需要 key

转载 作者:行者123 更新时间:2023-12-04 09:15:32 27 4
gpt4 key购买 nike

我正在将我的 Rails 应用程序从 v4 升级到 v5。当我运行测试时,其中一些测试失败了,以前通过。
例如,
(枚举)

enum session_type: {regular: 0, demo: 1, promotional: 2}
(用法)
session = {
:uuid => SecureRandom.uuid,
:session_type => 0,
}

post :create, :format => :json, params: { :session => session }
该参数通过 params.require(:session).permit(...)
'0' is not a valid session_type
/home/anz/.rvm/gems/ruby-2.2.3/gems/activerecord-5.0.0/lib/active_record/enum.rb:137:in `assert_valid_value'
/home/anz/.rvm/gems/ruby-2.2.3/gems/activerecord-5.0.0/lib/active_record/attribute.rb:67:in `with_value_from_user'
/home/anz/.rvm/gems/ruby-2.2.3/gems/activerecord-5.0.0/lib/active_record/attribute_set.rb:51:in `write_from_user'
/home/anz/.rvm/gems/ruby-2.2.3/gems/activerecord-5.0.0/lib/active_record/attribute_methods/write.rb:50:in `write_attribute_with_type_cast'
/home/anz/.rvm/gems/ruby-2.2.3/gems/activerecord-5.0.0/lib/active_record/attribute_methods/write.rb:32:in `write_attribute'
/home/anz/.rvm/gems/ruby-2.2.3/gems/activerecord-5.0.0/lib/active_record/attribute_methods/write.rb:20:in `__temp__3756373796f6e6f547970756='
当我使用 regular而不是 0 , 有用。这是怎么回事?

更新 1 :
这样做正确解析参数
@request.env['CONTENT_TYPE'] = 'application/json'
post :create, :format => :json, params: { :session => session }
我试过 as: :json ,但未能奏效。我想知道为什么它不起作用,看起来比添加 @request.env 好多了.
post :create, as: :json, params: { :session => session }

更新 2 :
将 rails 从 5.0.0 更新到 5.0.7.2 后, as: :json正在工作。
post :create, as: :json, params: { :session => session }

最佳答案

仔细看报错信息,是在提示'0' ,不是 0 .
如果您尝试设置 session_type到一个字符串,那么它期待 'regular' , 'demo' , 或 'promotional' .如果您使用数字,则它需要 0 , 1 , 或 2 .但是 ActiveRecord 不够聪明,无法在查看是否传递有效值之前尝试将字符串转换为数字,因此它只会看到 '0'是不在 %w[regular demo promotional] 中的东西并告诉您您正在传递无效值。
因此,要么修复客户端以发送字符串,要么调整您的参数解析以将字符串映射到数字,如下所示:

def model_params
permitted = params.require(:session).permit(...)
if(permitted[:session_type].in?(Model.session_types.values.map(&:to_s))
permitted[:session_type] = permitted[:session_type].to_i
end
permitted
end

关于ruby-on-rails - 将 Rails 从 v4 升级到 v5 后,带有枚举的测试用例需要 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com