Ruby on rails 带符号的Ruby access嵌套属性

Ruby on rails 带符号的Ruby access嵌套属性,ruby-on-rails,ruby,symbols,Ruby On Rails,Ruby,Symbols,我正在尝试编写一个方法,该方法使用对象,符号(或者其他什么,这里是问题)和“upcases”键处的值(例如) 简单案例: foo = { a: 'hi', b: 'there' } def upc_value(object, key) object[key].upcase! end upc_value(foo, :b) puts foo #=> { a: 'hi', b: 'THERE' } 但是如果我的foo对象更复杂,我也希望该方法能够处理嵌套属性 更复杂的案例: foo

我正在尝试编写一个方法,该方法使用对象符号(或者其他什么,这里是问题)和“upcases”键处的值(例如)

简单案例:

foo = { a: 'hi', b: 'there' }

def upc_value(object, key)
  object[key].upcase!
end

upc_value(foo, :b)

puts foo #=> { a: 'hi', b: 'THERE' }
但是如果我的
foo
对象更复杂,我也希望该方法能够处理嵌套属性

更复杂的案例:

foo = { a: 'hi', b: [{ c: 'foo', d: 'bar' }, { c: 'bob', d: 'lisa' }] }

def upc_value(object, key)
  object[key].upcase!
end

# I would like to be able to do something like:   

upc_value(foo, :b[:d])

puts foo #=> { a: 'hi', b: [{ c: 'foo', d: 'BAR' }, { c: 'bob', d: 'LISA' }] }
我显然不能这样做,我很好奇是否存在像“深_符号”这样的东西


真正的问题:
在这里,我真正想要实现的是一个模块,它在保存模型之前从包含URL的每个字段中删除主机。
它包含在每个需要它的模型中,我调用一个包含url的
fields\u
方法来获取字段的符号。
问题是我在一个模型上嵌套了属性,我需要使用与使用符号相同的方法来访问它们


谢谢你的帮助

这是一个开始。这是一种递归方法,可以就地更改数据:

def deep_transform(object, key, &block)
  case object
  when Array
    object.each do |element|
      deep_transform(element, key, &block)
    end
  when Hash
    object.each_value do |value|
      deep_transform(value, key, &block)
    end
    if value = object[key]
      object[key] = yield(value)
    end
  end
end

foo = { a: 'hi', b: 'there' }
deep_transform(foo, :b){ |str| str.upcase }
p foo
# {:a=>"hi", :b=>"THERE"}

foo = { a: 'hi', b: [{ c: 'foo', d: 'bar' }, { c: 'bob', d: 'lisa' }] }
deep_transform(foo, :d, &:upcase) # Alternative way to call the method
p foo
# {:a=>"hi", :b=>[{:c=>"foo", :d=>"BAR"}, {:c=>"bob", :d=>"LISA"}]}

请注意,该方法将变异与
:d
键相关的每个值。您没有像示例中那样指定
:b[:d]

谢谢您的快速回答,它就像一个符咒!我刚刚在switch语句中添加了一个case来满足我的需要:当MyModel object.attributes.each_value do | value | deep_transform(value、key和block)结束时