rails方法全局参数kind_出错

pcww981p  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(252)

我最近进行了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? 但是没有骰子。

mxg2im7a

mxg2im7a1#

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

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

它将检查它是否属于这些类之一。

dtcbnfnu

dtcbnfnu2#

我为这个应用程序做的升级是从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

i、 这是一个小 Package 周围的内置 kind_of? 方法。
尽管如此,我仍然不知道为什么这会因为ruby和/或rails升级而“停止工作”。

相关问题