如何通过activerecord从json字符串列中删除元素

Min*_*ini 5 activerecord json ruby-on-rails

我有一个表有一个字符串列包含 json 数据每条记录就像

{"id":1,"type":"car","name":"bmw"}
{"id":2,"type":"car","name":"Fiat"}
{"id":3,"type":"truck","name":"RAM"}
Run Code Online (Sandbox Code Playgroud)

现在我需要进行迁移以通过 rails ActiveRecord::Migration[5.0] 从 json 字符串中删除 name 的元素,变成这样

{"id":1,"type":"car"}
{"id":2,"type":"car"}
{"id":3,"type":"truck"}
Run Code Online (Sandbox Code Playgroud)

Jos*_*era 7

如果数据库是Postgresql,列是jsonb,那么假设你要操作表car

<MODEL_NAME>.update_all("car = car - 'name'")
Run Code Online (Sandbox Code Playgroud)

可以通过 Rake 任务或数据迁移来完成


Min*_*ini 3

我已经通过 rake 脚本完成了

desc 'Remove name'
  task remove_name: :environment do
    Entry.all.find_each do |entry|
      puts "Removing #{entry.id}"
      entry.data.delete("name")
      entry.save
    end
  end
Run Code Online (Sandbox Code Playgroud)