Rails 方法全局参数 kind_in 升级时出错
Rails method global params kind_in error when upgraded
我最近完成了 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?
,也没有找到对该方法的任何引用,而且由于您没有发布错误,所以不确定您的问题。 is_a?
、kind_of?
、instance_of?
是检查对象 class 的几种方法,但它们只检查一个 class。查看您的代码,您的情况的一个选项可能是:
if [Hash, ActionController::Parameters].include?(v.class)
这将检查它是否属于这些 classes 之一。
the upgrade I did for this app was rails 5.0.3 to rails 6.1+ and went from ruby 2.2.6 to ruby 3.0.1
这是自找麻烦。 It is strongly advised to try upgrading one minor version at a time(例如 rails 5.0 --> 5.1 --> 5.2 --> 6.0 --> 6.1),否则你很可能在没有关于为什么停止的信息的情况下破坏东西 working/how 修复它。
同样适用于 ruby 版本...在 绝对最低限度 我会推迟到 ruby v3 的最终升级,直到您的应用程序在ruby2.7.
I'm not sure why kind_in?
has stopped working
我也不是,因为这是一种自定义方法。你没有告诉我们它是如何定义的,也没有告诉我们错误信息,所以我不可能自信地说出了什么问题。
我的猜测是它的实现方式如下:
class Object
def kind_in?(classes)
classes.any? { |c| self.kind_of?(c) }
end
end
即它是 the built-in kind_of?
method.
的一个小包装
话虽如此,我仍然不知道为什么这会由于 ruby and/or rails 升级而“停止工作”。
我最近完成了 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?
,也没有找到对该方法的任何引用,而且由于您没有发布错误,所以不确定您的问题。 is_a?
、kind_of?
、instance_of?
是检查对象 class 的几种方法,但它们只检查一个 class。查看您的代码,您的情况的一个选项可能是:
if [Hash, ActionController::Parameters].include?(v.class)
这将检查它是否属于这些 classes 之一。
the upgrade I did for this app was rails 5.0.3 to rails 6.1+ and went from ruby 2.2.6 to ruby 3.0.1
这是自找麻烦。 It is strongly advised to try upgrading one minor version at a time(例如 rails 5.0 --> 5.1 --> 5.2 --> 6.0 --> 6.1),否则你很可能在没有关于为什么停止的信息的情况下破坏东西 working/how 修复它。
同样适用于 ruby 版本...在 绝对最低限度 我会推迟到 ruby v3 的最终升级,直到您的应用程序在ruby2.7.
I'm not sure why
kind_in?
has stopped working
我也不是,因为这是一种自定义方法。你没有告诉我们它是如何定义的,也没有告诉我们错误信息,所以我不可能自信地说出了什么问题。
我的猜测是它的实现方式如下:
class Object
def kind_in?(classes)
classes.any? { |c| self.kind_of?(c) }
end
end
即它是 the built-in kind_of?
method.
话虽如此,我仍然不知道为什么这会由于 ruby and/or rails 升级而“停止工作”。