从控制器调用模块函数(NoMethodError)

6

我是一名有用的助手,可以为您进行文本翻译。

那么,我有一个名为“MiddleMan”的模块,在Rails控制台中调用它没有问题,但在控制器中出现NoMethodError错误。

在控制器中,我有:

class SignUpController < ApplicationController
  include MiddleMan
  def page_one
      @package = MiddleMan::read_catalog("a", "b", "c")
  end
end

而在 middleman.rb 模块中,我有以下内容:

module MiddleMan
  def read_catalog(package, payment, coupon)
    Package.new(:price => "4.99")
  end
end

有什么想法吗?

1个回答

18

既然您已经引入了该模块,那么类的实例方法read_catalog会被添加到其中,所以您可以直接调用它:

class SignUpController < ApplicationController
  include MiddleMan
  def page_one
      @package = read_catalog("a", "b", "c")
  end
end

谢谢,这个方法可行... 我还得把中间文件的名字改成middle_man.rb。 - Msencenb
4
顺便提一句,如果你想直接从一个模块中调用方法而不需要混合(include)它们,你需要将它们定义为def self.method_name,这样它们就会绑定到模块实例本身。另一个(奇怪的)技巧是让模块扩展自己。但是,你不需要使用::语法,只需要使用一个点即可。 - d11wtq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接