来自Controller的调用模块功能(NoMethodError)

Mse*_*enb 5 controller module ruby-on-rails ruby-on-rails-3

所以我有一个模块"MiddleMan"我可以在rails控制台中调用它,但在控制器中我得到一个NoMethodError

在控制器中我有:

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

在middleman.rb模块中,我有:

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

有什么想法吗?

Wiz*_*Ogz 17

由于您包含了模块,因此实例方法read_catalog已添加到您的类中,因此您可以直接调用它:

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

  • 作为旁注,如果要直接从模块调用方法而不将它们混合在一起,则需要将它们定义为`def self.method_name`,以便它们绑定到模块实例本身.这里的另一个(奇怪的)技巧是使模块自身扩展.你不使用`::`语法,只需使用一个点. (4认同)