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
方法而不是在我的关注中声明的方法。更改关注中的函数名称就成功了!
我正在将我的 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
方法而不是在我的关注中声明的方法。更改关注中的函数名称就成功了!