mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Refactor data migration to use data sets
This commit is contained in:
committed by
Maikel Linke
parent
b8afb7ec4d
commit
d016c47789
@@ -1,29 +1,38 @@
|
||||
require 'concerns/address_display'
|
||||
require 'spree/address'
|
||||
|
||||
class SplitCustomersName < ActiveRecord::Migration[6.1]
|
||||
class Customer < ActiveRecord::Base
|
||||
class Customer < ApplicationRecord
|
||||
belongs_to :bill_address, class_name: "Spree::Address"
|
||||
end
|
||||
|
||||
def change
|
||||
def up
|
||||
add_column :customers, :first_name, :string, null: false, default: ""
|
||||
add_column :customers, :last_name, :string, null: false, default: ""
|
||||
rename_column :customers, :name, :backup_name
|
||||
reversible do |dir|
|
||||
dir.up { migrate_customer_name_data }
|
||||
end
|
||||
|
||||
migrate_customer_name_data!
|
||||
end
|
||||
|
||||
def migrate_customer_name_data
|
||||
Customer.includes(:bill_address).find_each do |customer|
|
||||
def down
|
||||
remove_column :customers, :first_name
|
||||
remove_column :customers, :last_name
|
||||
rename_column :customers, :backup_name, :name
|
||||
end
|
||||
|
||||
def migrate_customer_name_data!
|
||||
Customer.includes(:bill_address).where.not(bill_address_id: nil).find_each do |customer|
|
||||
bill_address = customer.bill_address
|
||||
|
||||
if bill_address.present? && bill_address.firstname.present? && bill_address.lastname?
|
||||
customer.first_name = bill_address.firstname.strip
|
||||
customer.last_name = bill_address.lastname.strip
|
||||
else
|
||||
first_name, last_name = customer.backup_name.strip.split(' ', 2)
|
||||
customer.first_name = first_name
|
||||
customer.last_name = last_name
|
||||
end
|
||||
customer.first_name = bill_address.firstname.strip
|
||||
customer.last_name = bill_address.lastname.strip
|
||||
customer.save
|
||||
end
|
||||
|
||||
Customer.where(first_name: "", last_name: "").where.not(backup_name: [nil, ""]).find_each do |customer|
|
||||
first_name, last_name = customer.backup_name.split(' ', 2)
|
||||
customer.first_name = first_name
|
||||
customer.last_name = last_name.to_s
|
||||
customer.save
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user