【发布时间】:2013-01-08 15:15:38
【问题描述】:
这是一个 Ruby 问题,尽管我在 Rails 上下文中使用它。
我需要调用一个方法,在该方法中我使用字符串变量为其键(参数名称)赋值。
例如我得到了:
MyRailsModelClass.where(key_of_my_method: my_value)
我想让它更有活力。 我可以像“my_rails_model_class”这样创建一个 MyRailsModelClass。分类
我需要让 key_of_my_method 更具动态性并用变量替换它。 我正在考虑类似的事情:
"my_rails_model_class".classify.where(my_key.to_sym => my_value)
有人知道吗? 谢谢
【问题讨论】:
-
当然,这行得通。您在执行此操作时遇到问题吗?
-
Yes 似乎不适用于 rbuy 1.9 版密钥语法(没有“=>”)
-
正确,您不能使用 JSON 类型的语法,因为符号只是动态引用的(通过
to_sym)。你有什么理由不能使用火箭语法=>? -
由于没有冒号的语法在 ruby 1.9 中是新的,我预计将来可能会弃用“箭头”语法。
-
不,目前还没有这样的想法 - 引入冒号语法是为了为常见情况启用更简单、更友好的代码。它不会取代火箭语法,因为它没有涵盖所有情况;而仅当键是静态符号时。对于动态分配符号或任何其他类型(Fixnum、String、younameit)的键,火箭语法是唯一有效的。
标签: methods ruby-on-rails-3.2 metaprogramming