Class: AddLocaleToRubyCmsContentBlocks

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/ruby_cms/templates/db/migrate/20260127000001_add_locale_to_ruby_cms_content_blocks.rb

Instance Method Summary collapse

Instance Method Details

#changeObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/generators/ruby_cms/templates/db/migrate/20260127000001_add_locale_to_ruby_cms_content_blocks.rb', line 4

def change
  return unless table_exists?(:ruby_cms_content_blocks)

  unless column_exists?(:ruby_cms_content_blocks, :locale)
    add_column :ruby_cms_content_blocks, :locale, :string, default: "en", null: false
  end

  # Remove old unique index on key
  remove_index :ruby_cms_content_blocks, :key if index_exists?(:ruby_cms_content_blocks, :key)

  # Add new composite unique index on key + locale
  add_index :ruby_cms_content_blocks, %i[key locale], unique: true, if_not_exists: true

  # Add index for locale queries
  add_index :ruby_cms_content_blocks, :locale, if_not_exists: true

  # Migrate existing records to default locale (idempotent — only touches blanks)
  reversible do |dir|
    dir.up do
      default_locale = begin
        I18n.default_locale.to_s
      rescue StandardError
        "en"
      end
      execute <<~SQL.squish
        UPDATE ruby_cms_content_blocks
        SET locale = '#{default_locale}'
        WHERE locale IS NULL OR locale = ''
      SQL
    end
  end
end