这应该很容易,但我找不到合适的解决方案。 对于第一级键:
resource.public_send("#{key}=", value)
但对于 foo.bar.lolo
呢?
我知道我可以像下面这样得到它:
'foo.bar.lolo'.split('.').inject(resource, :send)
或
resource.instance_eval("foo.bar.lolo")
但是假设我不知道嵌套级别,如何将值设置为最后一个变量,它可能是第二个或第三个。
是否有一种适用于所有级别的通用方法? 对于我的例子,我可以这样做:
resource.public_send("fofo").public_send("bar").public_send("lolo=", value)
最佳答案
哈希的答案,只是出于好奇:
hash = { a: { b: { c: 1 } } }
def deep_set(hash, value, *keys)
keys[0...-1].inject(hash) do |acc, h|
acc.public_send(:[], h)
end.public_send(:[]=, keys.last, value)
end
deep_set(hash, 42, :a, :b, :c)
#⇒ 42
hash
#⇒ { a: { b: { c: 42 } } }
关于ruby-on-rails - 如何在 Ruby 哈希中动态设置嵌套键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41639364/