民间,
我有一个 config / settings.yml 文件,如下所示:
lab_options: mappings_hash:{can_type:" Tumor :: OncologyRun.basic_test"}
然后在我的模型中 app / models / tumor.rb 我想做这样的事情
def sync_tumor_test
Settings.lab_options.mappings_hash.to_hash[:can_type](age, demographic)
end
在上述情况下,我想使用年龄和人口统计参数调用方法 Tumor :: OncologyRun.basic_test 。 Tumor :: OncologyRun.basic_test方法存在于lib / tumor / oncology_run.rb中,如下所示:
module Tumor
module OncologyRun
def OncologyRun.basic_test(age, demographics)
#code here
end
end
end
我知道在ruby方法名称中是字符串,所以当我从rails控制台尝试使用发送(Settings.lab_options.mappings_hash.to_hash [:can_type]之类的东西时,如何用参数调用它(年龄,人口统计))我得到 NOMethod错误任何反馈都非常感谢,非常感谢
答案 0 :(得分:1)
在这种情况下,您将对象名称和方法调用都存储在一个字符串中,因此首先必须将它们分解,然后使用send
,如下所示:
klass, meth = Settings.lab_options.mappings_hash.to_hash[:can_type].split('.')
klass.constantize.send(meth.to_sym, age, demographic)
上述内容应与调用Tumor::OncologyRun.basic_test(age, demographic)
同等。需要constantize
调用才能将对象名称转换为实际的ruby对象。
注意 - 这假设basic_test
是OncologyRun
上的类方法。如果它是实例方法,则需要先调用new
,然后对结果对象使用send
调用。