在Ruby on Rails控制器测试中如何调用控制器内定义的方法?
问题解决:NoMethodError调用AdController方法报错
错误原因很明确:pctrToAd是AdController的实例方法,而非类方法,你现在用类直接调用的方式(AdController.pctrToAd(...))不符合方法定义,所以触发了NoMethodError。
正确调用方式分两种情况:
- 情况1:保留实例方法定义
先创建AdController的实例对象,再通过实例调用方法:
# 先实例化AdController ad_controller = AdController.new # 通过实例调用pctrToAd方法 finalAds = ad_controller.pctrToAd(selectedAds: selectedAds, pctr: testCTR)
这种方式适用于pctrToAd方法需要依赖AdController实例内部状态(比如实例变量)的场景。
- 情况2:将方法改为类方法
如果pctrToAd不需要依赖实例状态,可以把它定义为类方法,这样你原来的调用方式就能正常工作。修改AdController的方法定义:
class AdController # 用self.前缀定义类方法 def self.pctrToAd(selectedAds:, pctr:) # 原方法逻辑 end end
修改后,你之前的AdController.pctrToAd(...)调用就不会报错了。
内容的提问来源于stack exchange,提问作者itsmarziparzi
相关产品推荐
相关产品推荐

