2011-07-06 50 views
3

所以我有一個模塊「中間人」我可以調用它只是在軌控制檯,但在控制器我得到一個NoMethodError呼叫從控制器(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 

有什麼想法?

回答

13

由於包含的是實例方法read_catalog被添加到您的類的模塊,這樣你就可以直接調用它:

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

感謝這個工作...我也不得不改變我的中間人文件的名稱middle_man.rb – Msencenb

+3

作爲一個方面說明,如果你想直接調用模塊中的方法,而不需要混合它們,你需要將它們定義爲'def self.method_name',以便它們綁定到模塊實例本身。另一個(奇怪的)技巧是讓模塊自行擴展。你不使用'::'語法,你只是使用一個點。 – d11wtq