Sha256: d7be3a9ed9906a0a177890b3fb723d9f4dbbfdc4d6e6a34af412582ce62a8129

Contents?: true

Size: 1.36 KB

Versions: 3

Compression:

Stored size: 1.36 KB

Contents

class MigrateTranslateable<%= table_name.camelize + field_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
  def change
    reversible do |dir|
      dir.up do
        add_column :<%= table_name %>, :<%= field_name + '_t' %>, :jsonb, null: false, default: {}
        execute <<-SQL
        UPDATE <%= table_name %> AS m1
        SET <%= field_name + '_t' %> = (
          SELECT row_to_json(t) FROM (
            SELECT <%= field_name %> AS <%= locale %> FROM <%= table_name %> AS m2 WHERE m1.id = m2.id
          ) t
        )::jsonb;
        SQL
        remove_column :<%= table_name %>, :<%= field_name %>
        rename_column :<%= table_name %>, :<%= field_name + '_t' %>, :<%= field_name %>
        add_index :<%= table_name %>, :<%= field_name %>, using: :gin
      end

      dir.down do
        add_column :<%= table_name %>, :<%= field_name + '_t' %>, :string, null: false, default: ''
        execute <<-SQL
        UPDATE <%= table_name %> AS m1
        SET <%= field_name + '_t' %> = (
          SELECT <%= field_name %>->>'<%= locale %>' AS <%= field_name %> FROM <%= table_name %> AS m2 WHERE m1.id = m2.id
        );
        SQL
        remove_column :<%= table_name %>, :<%= field_name %>
        rename_column :<%= table_name %>, :<%= field_name + '_t' %>, :<%= field_name %>
        add_index :<%= table_name %>, :<%= field_name %>
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
translateable-0.1.6 lib/generators/translateable/templates/migration.rb.erb
translateable-0.1.5 lib/generators/translateable/templates/migration.rb.erb
translateable-0.1.4 lib/generators/translateable/templates/migration.rb.erb