use*_*264 3 ruby ruby-on-rails alpine-linux
最近我从ruby3.1.2-alpine3.15->更新ruby3.2.1-alpine3.17,我做的唯一的 gem 更新是mysql2,从0.5.3到0.5.5支持 openssql3。并遵循Ruby3.2.0 Breaking Changes并添加--jit --yjit标志。几乎所有应用程序都运行良好。但不知怎的,一段代码却没有。只是一个简单的params.permit:
permitted_params = params.permit(:category_id, :private, tags: [])\nRun Code Online (Sandbox Code Playgroud)\n失败的原因是
\nNoMethodError:\n undefined method `=~\' for #<HereGoes::MyModel>\nRun Code Online (Sandbox Code Playgroud)\n我的params看起来像这样:(其中“字段”只是额外的数据)。我看到的唯一奇怪的事情是嵌套的ActionController::Parameters,但同样的参数在旧的 ruby 版本中解析得很好。
"#<ActionController::Parameters {\\"field_values\\"=>[#<ActionController::Parameters \n{\\"field_id\\"=>4, \\"value\\"=>\\"Test changed\\", \\"type\\"=>\\"string\\"} permitted: false>], #\n<HereGoes::MyModel id: nil, category_id: nil, uuid: \\"87ebb507-e381-4d57-b66c-10e51f10c014\\", \ncreated_at: nil, updated_at: nil, name: \\"Alphazap5\\", \\"fields\\"=> {\\"Viva11\\"=>nil,\\"Y-solowarm4 \nTextField\\"=>nil,\\"Y-solowarm4 StringField\\"=>nil,\\"Y-solowarm4 LocationsField\\"=>nil}}, \nbackup_id: 0, options: {}, tag_list: nil>=>{\\"id\\"=>1}} permitted: false>"\nRun Code Online (Sandbox Code Playgroud)\n如果我回到ruby3.1.2它再次工作。两个参数在执行方法时是相同ruby3.1.2的。ruby3.2.1.permit
我不知道还会有什么。我没有在 ruby \xe2\x80\x8b\xe2\x80\x8bor Rails 问题中找到任何与我的问题相关的内容。所以...如果有人有想法,我将不胜感激。
\nObject#=~已被删除(又名Kernel#=~):
https ://rubyreferences.github.io/rubychanges/3.2.html#removals
next unless key =~ /\(\d+[if]?\)\z/
Run Code Online (Sandbox Code Playgroud)
你有HereGoes::MyModel以下关键params:
{ "field_values" => [...], #<HereGoes::MyModel...> => {"id"=>1} }
Run Code Online (Sandbox Code Playgroud)
这以前从未被允许,因为Object#=~只是返回,这就是删除nil的原因:
# v3.1.2
>> ActionController::Parameters.new({field_values: [], Class.new => {id: 1}}).permit(:id, field_values: [])
=> #<ActionController::Parameters {"field_values"=>[]} permitted: true>
# v3.2.1
>> ActionController::Parameters.new({field_values: [], Class.new => {id: 1}}).permit(:id, field_values: [])
/home/alex/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/actionpack-7.0.4.2/lib/action_controller/metal/strong_parameters.rb:1069:in `block in permitted_scalar_filter':
undefined method `=~' for #<Class:0x00007fd63c224380> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
您必须在其他地方做其他事情才能使其发挥作用。
您的模型不应该真正位于 中params,如果您需要帮助,则必须共享一些代码。
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |