升级到 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
我刚从 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