ActiveRecord_AssociationRelation 过滤错误数量的参数

ActiveRecord_AssociationRelation filter wrong number of arguments

我正在将我的 rails 应用程序从一个次要版本更新到另一个 rails (6.0.1) -> rails (6.0.3.5) 并且 ActiveRecord_AssociationRelation.filter 方法似乎从 expect 1 argument -> expect 0 argument。我找不到解释原因或实际功能签名的地方。有帮助吗?

我曾经调用:@obj.filter(params[:filter]) 现在触发错误:

ArgumentError: wrong number of arguments (given 1, expected 0) in `filter'

你可以用method的方法查一下filter的出处(呵呵)

(我以User为例)

User.all.method(:filter)

将return

#<Method: User::ActiveRecord_Relation(Enumerable)#filter()>

这意味着 filter 来自 Enumerable 模块。 现在,如果我们检查文档:https://apidock.com/ruby/v2_6_3/Enumerable/filter 看起来它确实不接受任何参数。您只能将一个块传递给它,这就是我建议的做法。

为什么它以前可以工作?不确定,也许您正在使用一些 gem 或自定义代码覆盖此方法?

错误是由于 ruby 版本的更新。在 ruby 2.7 中,他们引入了一个 filter 功能,这在 Array 之前是不存在的。我在模型的关注中声明了另一个 filter 方法,但是 Rails 正在将我的活动记录对象转换为数组并在其上调用 Array.filter 方法而不是在我的关注中声明的方法。更改关注中的函数名称就成功了!