В моей таблице Categories
есть столбец json
, и я хочу обновить каждую запись категории переводом из файла json. Я создал файл json таким образом, чтобы он содержал массив категорий, а каждая категория имела имя и перевод, например:
{
"categories": [
{
"name": "starter",
"message": "Abs/Анти блокираща система (система против боксуване)"
},
{
"name": "alternator",
"message": "Алтернатор"
}
...
]
}
Я хочу, чтобы каждая запись категории обновлялась с помощью языкового ключа, а такжеперевод из файла, вот так:
{ bg: 'translation from file' }
У меня есть этот код
file = File.read('app/services/translations/files/bg.json')
data = JSON.parse(file)
language = File.basename(file, '.json')
Translations::CategoriesMigrator.call(file: data, language: language)
module Translations
class CategoriesMigrator < Service
def initialize(category_repo: Category)
@category_repo = category_repo
end
def call(file:, language:)
file['categories'].each do |category|
found_category = @category_repo.find_by(name: category['name'])
found_category.translated_categories[language] = category['message']
found_category.save
end
end
end
end
Прямо сейчас у меня все категории в одной записи категории,Что я делаю не так?
Обновление
Моя миграция БД выглядит так:
class AddTranslatedCategoriesToCategories < ActiveRecord::Migration[5.1]
def change
add_column :categories, :translated_categories, :jsonb, null: false, default: {}
add_index :categories, :translated_categories, using: :gin
end
end