discourse-translator/db/migrate/20250205082400_create_translation_tables.rb
Natalie Tay 7fc45d5be8
DEV: Move translation custom fields into their own tables (#201)
Currently, `Topic` and `Post` have detected_language and translations in custom fields, e.g.
```
post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD]
post.custom_fields[DiscourseTranslator::TRANSLATED_CUSTOM_FIELD]
topic.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD]
topic.custom_fields[DiscourseTranslator::TRANSLATED_CUSTOM_FIELD]
```

We are moving this into 4 tables/models
```
post has_one :content_locale, class_name: "DiscourseTranslator::PostLocale"
post has_many :translations, class_name: "DiscourseTranslator::PostTranslation"
topic has_one :content_locale, class_name: "DiscourseTranslator::TopicLocale"
topic has_many :translations, class_name: "DiscourseTranslator::TopicTranslation"
```

Since there are a lot of duplicates, this is implemented on the `Post` and `Topic` using a `Concern`, and any future translatable content can inherit this concern.

This PR also gets rid of the previous N+1 which happens when determining if the 🌐 translate button should appear for each post.
2025-02-10 12:29:07 +08:00

31 lines
890 B
Ruby

# frozen_string_literal: true
class CreateTranslationTables < ActiveRecord::Migration[7.2]
def change
create_table :discourse_translator_topic_locales do |t|
t.integer :topic_id, null: false
t.string :detected_locale, limit: 20, null: false
t.timestamps
end
create_table :discourse_translator_topic_translations do |t|
t.integer :topic_id, null: false
t.string :locale, null: false
t.text :translation, null: false
t.timestamps
end
create_table :discourse_translator_post_locales do |t|
t.integer :post_id, null: false
t.string :detected_locale, limit: 20, null: false
t.timestamps
end
create_table :discourse_translator_post_translations do |t|
t.integer :post_id, null: false
t.string :locale, null: false
t.text :translation, null: false
t.timestamps
end
end
end