将现有钢轨列从字符串转换为阵列

问题描述:

我有一个现有的钢轨应用程序,其中一列现有semi-colon separated string。我想将其转换为默认为empty array的数组。将现有钢轨列从字符串转换为阵列

此外,对于已经有semi-colon separated string格式数据的行,我们需要将其转换为适当的数组。

  • 数据库:psqlPostgreSQL
  • 框架:Rails 4.2

以上是在任何应用中,很多人的全面发展一个相当常见的场景面临的问题,而这样做Rails中一样。

在我看来,最简单的方式来获得这一切做的是:

  1. 生成一个新的迁移:rails g migration changeSomethingToArray
  2. 在新的迁移文件,添加以下代码。

    class ChangeQualificationToArray < ActiveRecord::Migration 
    def change 
        rename_column :coaches, :qualifications, :qualifications_text 
        add_column :coaches, :qualifications, :text, default: [] 
    
        coaches = Coach.all 
        coaches.each do |c| 
        c.qualifications = convert_to_array(c.qualifications_text) 
        c.save 
        end 
    
        remove_column :coaches, :qualifications_text 
    
    end 
    
    private 
    
    def convert_to_array(string) 
        string.split(';') 
        # This can be changed to `,` or whatever you're using to split your string. 
    end 
    end 
    

我解决了它这样的:

class ChangeQualificationToArray < ActiveRecord::Migration 

    def change 
    change_column :coaches, :qualifications, "varchar[] USING (string_to_array(qualifications, ';'))" 
    end 

end