2014-12-03 41 views
0

我已經通過一個紅寶石寶石(考拉)生成了一個對象,我用輔助方法寫了幾個模塊。爲了能夠使用對象模塊中的方法,我需要做些什麼?在Gem的對象上調用模塊的方法?

如果我,model_object = Model.new,model_object將有權訪問所有的實例變量,但對象不會(見下文)。

紅寶石2.1,4.1的Rails

配置/ application.rb中 - 在自動加載文件夾模塊

config.autoload_paths << Rails.root.join('lib/module_folder') 

模型

class Model < ActiveRecord::Base 
    include Module 
    include Module::Module2 
    include Module::Module3 

    def self.create_account(token) 
     object = Module.module_class_method(token) #this works and generates the Koala object 
     ERROR: object.module2_instance_method # Error: NoMethodError Exception: undefined method 
    end 
end 

模塊

module Module 
    extend ActiveSupport::Concern 
end 

單詞數

module Module 
    module Module2 
     def module2_instance_method 
     end 
    end 
end 

解決MYSELF - 問題是包括語句是在類中,如果我搬到外面他們它的工作。

+2

告訴我們你已經嘗試過,所以我們可以幫助(即向我們展示代碼)。 – Anthony 2014-12-03 19:22:27

+0

對不起,添加了代碼。 – Curt 2014-12-03 19:54:18

回答

0

將包含語句從內部移到類聲明上方,並且所有方法開始工作。我的假設是,當他們在聲明中時,他們只能用於該類的對象。

0

我相信如果你將你的模塊包含在app /目錄下的某個地方 - 它們將被自動包含。否則,您實際上必須明確要求他們在您的rails代碼中使用require語句

+0

我已經要求並將它們包含在它們被調用的模型中,但是我得到錯誤:NoMethodError異常:未定義的方法 – Curt 2014-12-03 19:41:10

0

沒有看到實際的代碼,我認爲Module2在您的代碼片段中的問題是self.方法。

因爲你在你的object的實例調用module2_instance_method,模塊中的方法不能有self.,因爲它指定一個類的方法,並且因此,將不得不被稱爲Module::Module2.module2_instance_but_not_really_because_I_am_a_class_method

我相信如果您將def self.module2_instance_method ... end更改爲def module2_instance_method ... end,則不應再收到NoMethodError異常。

道歉,如果我誤解或誤解OP。

相關問題