Ruby on rails 修改参数嵌套哈希的最佳方法是什么?

Ruby on rails 修改参数嵌套哈希的最佳方法是什么?,ruby-on-rails,ruby,ruby-on-rails-5.2,Ruby On Rails,Ruby,Ruby On Rails 5.2,修改params散列中某些值的最佳方法是什么?例如,这是params散列 {"utf8"=>"✓", "authenticity_token"=>"asdasdasd/Wi71c4U3aXasdasdasdpbyMZLYo1sAAmssscQEkv0WsWBDyslcWJxUZ2pPKOQFmJoVZw==", "user_api"=>{"user"=>"asdak", "name"=>"asdada", "friends_attributes"=>{"156

修改params散列中某些值的最佳方法是什么?例如,这是params散列

{"utf8"=>"✓", "authenticity_token"=>"asdasdasd/Wi71c4U3aXasdasdasdpbyMZLYo1sAAmssscQEkv0WsWBDyslcWJxUZ2pPKOQFmJoVZw==", "user_api"=>{"user"=>"asdak", "name"=>"asdada", "friends_attributes"=>{"1566720653776"=>{"_destroy"=>"false", "player_name"=>"asda", "player_type"=>"backside", "user_interest"=>"cricket,football,basketball"}, "1566720658089"=>{"_destroy"=>"false", "player_name"=>"asdad", "player_type"=>"forward", "user_interest"=>"table_tennis,chess"}}}, "commit"=>"Save User Data"}
因此,根据上述参数,我需要将用户选项值修改为数组

params.each do |key, user_api_hash|
    if key == "user_api"
      user_api_hash.each do |key, friend_hash|
        if key == "friends_attributes"
          friend_hash.each do |key, value|
            value["user_interest"] = value["user_interest"].split(',')
          end
        end
      end
    end
  end
我发现这种方法有点效率低下,因为根据散列的数量,我必须迭代指数时间。有谁能给我建议一个更好的方法吗


提前感谢您的帮助。

如果您想修改它们而不是返回新对象:

(params.dig(:user_api, :friends_attributes) || []).each do |_, attributes|
  attributes['user_interest'] = attributes['user_interest'].split(',')
end
  • dig
    可以访问散列中的键以及散列中的其他键
  • 如果某个键不存在,那么它将返回nil,在这种情况下,使用一个空数组,它将迭代0次
  • 在用户属性内部,您可以通过简单的分配来修改它们