0

我想知道为什么当我尝试调用该模型受保护的方法时,我与我的模型混合在一起的模块中有一个辅助方法在我的控制器中抛出 NoMethodError。我的代码目前看起来像这样。

#models/my_class.rb

class MyClass
  include HelperModule
    
  def self.list_payments(payments)
     new_payments = []
     payments.each do |payment|
        payment = MyClass.new.tap do |p|
           p.quality_check = quality_check(payment)
           p.amount_with_fee = calculate_fees(payment)
        end

        if payment.valid?
          payment.save
          new_payments << payment
        end
     end
     new_payments
  end
end

 #controllers/my_classes_controller

 class MyClassController < ApplicationController
     def index
        response = Faraday.get
        unfiltered_payments = JSON.parse(response.body)["payments"]
        @payments = MyClass.list_payments(unfiltered_payments)
     end
 end

quality_check并且calculate_fees都在我的帮助模块中,但是在我调用时在控制器中,MyClass.list_payments(payments)我得到了NoMethodError这两种方法。我可以通过在我的控制器中包含助手并将此函数用作我的控制器中的私有函数来使其工作,但我试图遵循胖模型/瘦控制器约定。我在这里遗漏了什么还是可以将助手放在控制器中并将此功能移至控制器?使用ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20], 和Rails 6.1.0

4

1 回答 1

1

这是因为def self.list_payments是一个类方法,但你正在调用include HelperModule它只影响实例方法范围。

快速修复,只需替换includeextend.

于 2020-12-27T18:51:58.093 回答