Ruby on rails 升级到Rails 6后参数数量错误(给定4,应为0..1)

Ruby on rails 升级到Rails 6后参数数量错误(给定4,应为0..1),ruby-on-rails,ruby,ruby-on-rails-6,Ruby On Rails,Ruby,Ruby On Rails 6,我刚刚从Rails 5.2升级到Rails 6,我在一个课程中遇到了一个问题 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) s

我刚刚从Rails 5.2升级到Rails 6,我在一个课程中遇到了一个问题

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
它通过一个错误来表达:

wrong number of arguments (given 4, expected 0..1)
我花了两天时间搜索并试图解决这个问题,但没有任何运气。
非常感谢您的帮助

这是因为您正在为继承自
ApplicationRecord
的类重新定义
initialize
。它抛出了一个错误。如果你要做下面的事情,那就行了

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
请注意,不建议以这种方式重新定义
初始化
(请参阅文档),因此,如果可以,我将研究回调,看看您是否能够实现目标


希望能有所帮助。

这里的工厂也是不错的选择<代码>定义计算器.product(super_obj);Calculator.new(…).tap{| calc | calc.user=…}end
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