你可以做一些事情。
您可以像 dbugger 提到的那样在局部变量中获取内部哈希:
p = params[:data][:object]
update(capture_created: p[:created], capture_currency: p[:currency], ...)
或者您可以使用#tap 或#then(取决于您希望从表达式中得到什么返回值):
# This evaluates to params[:data][:object]
params[:data][:object].tap do |p|
update(capture_created: p[:created], capture_currency: p[:currency], ...)
end
# This evaluates to whatever update returns
params[:data][:object].then do |p|
update(capture_created: p[:created], capture_currency: p[:currency], ...)
end
如果嵌套哈希中的键只需要一致地重命名(即添加“capture_”前缀),那么#transform_keys:
update(params[:data][:object].transform_keys { |k| "capture_#{k}" })
是一个选项。字符串键可以使用 ActiveRecord #update 调用,但如果你真的想要它们,你可以获得符号:
update(params[:data][:object].transform_keys { |k| :"capture_#{k}" })
如果您想确保只访问某些键,您可能需要包含 Hash#slice 调用:
update(params[:data][:object].slice(:created, :currency, ...).transform_keys { |k| :"capture_#{k}" })