【问题标题】:wrong number of arguments (given 4, expected 0..1) after upgrading to Rails 6升级到 Rails 6 后参数数量错误(给定 4,预期为 0..1)
【发布时间】:2019-12-24 13:42:03
【问题描述】:

我刚刚从 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

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

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

它通过一个错误说:

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

我花了两天时间搜索并试图解决这个问题,但没有任何运气。 非常感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-6


    【解决方案1】:

    发生这种情况是因为您正在为继承自 ApplicationRecord 的类重新定义 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),所以如果可以的话,我会研究回调,看看你是否可以用它来实现你的目标。

    希望对您有所帮助。

    【讨论】:

    • 这里的工厂也是一个不错的选择。 def Calculator.produce(super_obj); Calculator.new(...).tap { |calc| calc.user = ...... } end.
    【解决方案2】:

    (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
    

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多