Methods 如何使用键名作为字符串变量调用方法(动态确定键参数)?

Methods 如何使用键名作为字符串变量调用方法(动态确定键参数)?,methods,ruby-on-rails-3.2,metaprogramming,Methods,Ruby On Rails 3.2,Metaprogramming,这是一个Ruby问题,尽管我在Rails上下文中使用它 我需要调用一个方法,其中我使用字符串变量为其键(参数名)赋值 例如,我得到: MyRailsModelClass.where(key_of_my_method: my_value) 我想让它更有活力。 我可以创建一个MyRailsModelClass,如“my\uRails\uModel\uClass”。分类 我需要使我的方法的key_更具动态性,并用变量替换它。 我在想这样的事情: "my_rails_model_class".clas

这是一个Ruby问题,尽管我在Rails上下文中使用它

我需要调用一个方法,其中我使用字符串变量为其键(参数名)赋值

例如,我得到:

MyRailsModelClass.where(key_of_my_method: my_value)
我想让它更有活力。 我可以创建一个MyRailsModelClass,如“my\uRails\uModel\uClass”。分类

我需要使我的方法的key_更具动态性,并用变量替换它。 我在想这样的事情:

"my_rails_model_class".classify.where(my_key.to_sym => my_value)
有人有线索吗?
谢谢

实际上,分类方法是不够的。在应用任何类方法之前,都需要进行常量化

我这样解决了它(因为它更有效;而classify确实调用了更多的方法:camelize(singularize(table_name.to_s.sub()):

但你可以用更长远的方法:

"my_rails_model_class".classify.constantize.where("my_key".to_sym == my_value).first

当然,这会起作用。您在执行此操作时遇到问题吗?是的,似乎不适用于rbuy版本1.9键语法(没有“=>”)正确,您不能使用JSON类型语法,因为符号仅被动态引用(通过
到\u sym
).有什么原因不能使用rocket语法吗?=>?由于ruby 1.9中没有冒号的语法是新的,我预计将来可能会出现“箭头”语法将被弃用。不,目前表上没有这样的想法-冒号语法的引入是为了使普通情况下的代码更简单、更友好。它不会取代火箭语法,因为它不涵盖所有情况;而只是在键是静态符号的情况下。对于动态分配符号的键,或任何ot她的类型(Fixnum、String、younameit),火箭语法是唯一有效的。
"my_rails_model_class".classify.constantize.where("my_key".to_sym == my_value).first