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