0

伙计们,

我有一个如下所示的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

在上述情况下,我想使用参数age人口统计数据调用方法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 控制台尝试使用类似send(Settings.lab_options.mappings_hash.to_hash[:can_type](age, population))我收到一个NOMethod 错误,非常感谢任何反馈,非常感谢

4

1 回答 1

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在结果对象上使用调用。

于 2013-03-11T16:13:28.147 回答