Sha256: 1471932ce8a5b3ed4988b4355f069d3b394e953b94cae0a06eb9c57f90df0e88

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 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 %>
        <% if index_exists?(table_name, field_name) %>
        add_index :<%= table_name %>, :<%= field_name %>, using: :gin
        <% end %>
      end

      dir.down do
        add_column :<%= table_name %>, :<%= field_name + '_t' %>, <%= field_type || ':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 %>
        <% if index_exists?(table_name, field_name) %>
        add_index :<%= table_name %>, :<%= field_name %>
        <% end %>
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
translateable-0.1.8 lib/generators/translateable/templates/migration.rb.erb
translateable-0.1.7 lib/generators/translateable/templates/migration.rb.erb