升级时Rails方法全局params kind_in错误



我最近进行了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.3rails 6.1+,从ruby 2.2.6ruby 3.0.1,所以我不确定kind_in?为什么停止工作。这是一个旧的应用程序(内置rails 2(,所以不确定它是否已被弃用。

任何帮助都将是伟大的。

编辑

我试过kind_of?,但没有骰子。

我为这个应用程序做的升级是rails 5.0.3到rails 6.1+,从ruby 2.2.6到ruby 3.0.1

这是在找麻烦。强烈建议您尝试一次升级一个次要版本(例如rails 5.0-->5.1-->5.2-->6.0-->6.1(,否则您很可能会在几乎没有关于它停止工作的原因/如何修复的信息的情况下破坏它。

对于ruby版本也是如此。。。至少我会推迟到ruby v3的最终升级,直到您的应用程序在ruby 2.7下正常工作。

我不确定kind_in?为什么停止工作

我也不是,因为这是一个自定义方法。你没有向我们展示它是如何定义的,也没有向我们显示错误信息,所以我不可能自信地说出了什么问题。

我的猜测是它实现了这样的东西:

class Object
def kind_in?(classes)
classes.any? { |c| self.kind_of?(c) }
end  
end 

即它是内置CCD_ 11方法的一个小包装器。

话虽如此,我仍然不知道为什么这会";停止工作";由于ruby和/或rails升级。

不确定kind_in?,也没有找到任何对该方法的引用,也因为您没有发布错误,所以不确定您的问题。is_a?kind_of?instance_of?是检查对象类的少数方法,但它们只检查单个类。查看您的代码,针对您的情况的一个选项可能是:

if [Hash, ActionController::Parameters].include?(v.class)

它将检查它是否属于这些类中的一个。

最新更新