2013-03-11 17 views
0

夥計們,軌從字符串get方法的名稱,然後傳遞參數

我有一個的config/settings.yml中文件看起來像這樣:

lab_options: mappings_hash:{can_type:「腫瘤: :OncologyRun.basic_test「}

然後在我的模型應用程序/模型/ tumor.rb我想要做這樣的事情

def sync_tumor_test 
    Settings.lab_options.mappings_hash.to_hash[:can_type](age, demographic) 
end 

在上述情況下,我想調用的方法腫瘤:: OncologyRun.basic_test帶參數年齡人口。該方法腫瘤:: OncologyRun.basic_test存在於LIB /腫瘤/ oncology_run.rb,看起來像這樣:

module Tumor 
    module OncologyRun 
     def OncologyRun.basic_test(age, demographics) 
     #code here 
     end 
    end 
    end 

我知道,在紅寶石方法名稱是字符串,所以我怎麼把這個帶參數,當我試圖從軌道控制檯與類似send(Settings.lab_options.mappings_hash.to_hash [:can_type](age,demographic))我得到一個NOMethod錯誤任何反饋是非常感激,非常感謝

回答

1

在這種情況下,您將對象名稱和方法調用存儲在單個字符串中,因此首先必須將它們分開,然後使用send,像這樣:

klass, meth = Settings.lab_options.mappings_hash.to_hash[:can_type].split('.') 
klass.constantize.send(meth.to_sym, age, demographic) 

以上應equivelant調用Tumor::OncologyRun.basic_test(age, demographic)。調用constantize需要將對象的名稱轉換爲實際的ruby對象。

注 - 此處假定basic_testOncologyRun上的一類方法。如果是實例方法,則需要先調用new,然後對結果對象調用send

+0

S非常感謝,完美無缺 – user1781472 2013-03-11 16:27:31

+0

甜美,一旦您滿意,請將答案標記爲已接受。 :) – 2013-03-11 16:36:25

相關問題