【发布时间】:2021-07-16 08:53:01
【问题描述】:
我最近完成了 rails 和 ruby 升级,我们在应用程序中没有强大的参数(我知道这是遗留问题)。
所以它在应用程序中的完成方式如下
def all_params_permitted(this_params = nil)
this_params = params if this_params == nil
this_params.permit!
this_params.each do |i, v|
if v.kind_in?([Hash, ActionController::Parameters])
all_params_permitted(v)
end
end
end
它遍历所有参数并只接受所有内容,all_params_permitted 在整个应用程序中被调用我很想添加强大的参数,但现在不行。
上述方法中的问题是kind_in? 我为这个应用程序所做的升级是rails 5.0.3 到rails 6.1+ 并从ruby 2.2.6 到ruby 3.0.1 所以我不知道为什么kind_in? 已经停止在职的。这是一个旧应用程序(内置 rails 2),所以不确定它是否已被弃用。
这里的任何帮助都会很棒。
编辑
我试过kind_of?,但没有骰子。
【问题讨论】:
-
"kind_in error when upgrade" – 当请求帮助解决错误时,请包括错误消息和堆栈跟踪的所有相关部分。
-
我还想指出,这种方法会导致“安全漏洞”!!...如果您曾经在代码中执行过
user.update(params)之类的操作,您可能容易受到提权的影响. -
是的,我知道 Tom,这就是为什么我想用强大的参数替换它。但是添加强大的参数将是“代码更改太大”,因此修复我们所拥有的问题,因为我很困惑哈哈。事实证明,我们在应用程序中有大量自定义代码以及扩展的 ruby(不是开玩笑),包括添加了一个 yes a 'kind_in' 方法,这就是为什么没有参考,因为它是完全自定义的,我们有很多这样的事情,我我创建这个问题时没有意识到这一点哈哈。
标签: ruby-on-rails ruby legacy