首页 > 解决方案 > 通过 Rails 迁移将符号转换为文本字段中的字符串

问题描述

我在数据库中有一个包含符号、字符串、数字等的文本字段。我需要更改部分数据: \nassigned_x:\n- :assigned_y\n- :assigned_to\n- :follow\n

例如,我需要将这些符号更改为数据库中的字符串,并为此创建了一个迁移:

def change
    statuses = [:assigned_x, :assigned_y, :follow]
    setting = Setting.last.data
    statuses.each do |status|
      setting.gsub!(status.to_s, status.to_s) if setting.include?(status.to_s)
    end
  end

但是,这些值都没有更新。你能帮我完成这个迁移吗?谢谢!

标签: ruby-on-railsmigration

解决方案


问题:

  • 您正在为setting变量分配一个属性并尝试使用gsub!
  • gsub!永远不会在数据库中保存任何内容
  • 此外,在您运行之前,数据永远不会保留在数据库中object.save

尝试这个:

def change
  statuses = [:assigned_x, :assigned_y, :follow]
  setting_obj = Setting.last
  setting_data = setting_obj.data
  statuses.each do |status|
    next unless setting_data.include?(status.to_s)

    setting_data = setting_data.gsub(status.to_s, status.to_s)
  end
  setting_obj.data = setting_data
  setting_obj.save
end

您可能必须gsub根据保存在数据库中的字符串来调试和更正方法的第一个参数


推荐阅读