升级到 Rails 6 后参数数量错误(给定 4,预期 0..1)

wrong number of arguments (given 4, expected 0..1) after upgrading to Rails 6

我刚从 Rails 5.2 升级到 Rails 6,我遇到了一个问题 class。

class Calculator < ApplicationRecord
  def initialize(obj, user_id, calc_type, will_id = nil )
    @inheritors = obj
    super_obj = obj.clone.merge!(user_id: user_id, type: calc_type, will_id: will_id)
    super(super_obj)
    @shares = {}
    @remains = RationalWithArgumentStore(0)
    @stop_residual_shares = false
    @special_case_apply = false
    @rules = {}
    @authorities = {}
  end
end

我正在创建 class 的新实例,如下所示

calc = Calculator.new(obj, user_id, calc_type, nil)

它通过一个错误说:

wrong number of arguments (given 4, expected 0..1)

我花了两天时间搜索并尝试解决问题,但没有成功。 非常感谢您的帮助

发生这种情况是因为您正在为继承自 ApplicationRecord 的 class 重新定义 initialize。它会抛出一个错误 here。如果您要执行以下操作,它将起作用。

class Calculator
  def initialize(obj, user_id, calc_type, will_id = nil)
    @obj = obj
    @user_id = user_id
    @calc_type = calc_type
    @will_id = will_id
  end
end

请注意,不建议以这种方式重新定义 initialize(请参阅文档 here),因此如果可以的话,我会研究一下回调,看看您是否可以用它来实现您的目标。

希望对您有所帮助。

(Rails 6.x) 我的一个模型有 include Rails.application.routes.url_helpers.

如果您遇到同样的问题,请将其删除并通过直接调用它来管理您的 url 方法:

def my_link_function
 # ... my code
 my_link = Rails.application.routes.url_helpers.url_for([my_params]))
 # ... other code
end