重命名哈希中的某个键

Ash*_*ury 5 ruby hash ruby-on-rails

我有一个car_details包含 2000 个条目的列,每个条目都是一个信息散列,如下所示:

{"capacity"=>"0",
 "wheels"=>"6",
 "weight"=>"3000",
 "engine_type"=>"Diesel",
 "horsepower"=>"350",
 "fuel_capacity"=>"35",
 "fuel_consumption"=>"30"}
Run Code Online (Sandbox Code Playgroud)

有些车的细节更多,有些车的细节更少。我想将每辆拥有该钥匙的汽车的"fuel_consumption"钥匙重命名为"mpg"

Oli*_*ves 1

据我所知,没有简单的方法可以使用原始 SQL 批量更新数据表中的序列化列。我能想到的最好的方法是做类似的事情:

Car.find_each do |car|
  mpg = car.car_details.delete("fuel_consumption")
  car.car_details["mpg"] = mpg if mpg
  car.save
end
Run Code Online (Sandbox Code Playgroud)

假设您正在使用 Active Record 并且您的模型称为“Car”。