通过rails迁移将符号转换为文本字段中的字符串



我在数据库中有一个文本字段,其中包含符号、字符串、数字等。我需要更改部分数据:nassigned_x:n- :assigned_yn- :assigned_ton- :follown

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

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

但是,这些值都没有更新。你能帮我迁移吗?非常感谢。

问题:

  • 您正在为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

您可能需要根据数据库中保存的String调试并更正gsub方法的第一个参数