【发布时间】:2015-05-25 14:51:30
【问题描述】:
我正在使用 Rails 4 并尝试通过字符串名称访问哈希变量。
例如,假设我有一个包含字段名称和地址的成员哈希的策略模型。
我希望能够将 policy_member_name 转换为 policy[:member][:name]。
但是,此字符串可能不止 3 个部分。我能够访问该值,但无法使用以下设置它:
ret = obj
keys.each do |key|
ret = ret[key.to_sym]
end
ret
其中keys 是一个数组,例如['member', 'name'],obj 是对象,例如Policy.first。但是,此方法只会返回 policy[:member][:name] 的值,并且不允许我执行 policy[:member][:name]=。
感谢您的帮助。
编辑:
我希望能够调用policy.member_name 来获取policy[:member][:name] 并让policy.member_name= "Something" 设置policy[:member][:name]="Something"
【问题讨论】:
-
你能给我们已知的输入和想要的输出吗?
-
旁注:在我看来,您正在为一些可能不像您想象的那么重要的事情牺牲性能。即使是 OpenStruct Ruby class - 非常接近您想要的 - 也会遭受性能成本,因为它依赖于
method_missing... 而且,它可能更令人困惑而不是有用 - 例如,当:policy.member = Users.find(1); policy.member_name = 'Joe'; puts policy.member时会发生什么。 ..? -
我需要这个的原因是我使用 gem
best_in_place来编辑字段。您是建议根本不使用OpenStructs,还是只是建议不需要点符号?或者您是否知道另一种编辑OpenStructs的方法?谢谢!
标签: ruby-on-rails ruby hash