【发布时间】:2020-12-27 14:13:18
【问题描述】:
我想知道为什么当我尝试调用该模型受保护的方法时,我与模型混合的模块中有一个辅助方法在我的控制器中抛出 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
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-6.1