【发布时间】:2020-02-23 00:34:48
【问题描述】:
我的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
【问题讨论】:
-
你在使用 PosgreSQL 对吗?什么版本?什么 Rails 版本?
-
是的,Postgres,Rails 5.1.7
-
该 JSON 列中存储的数据的结构是什么?该表的迁移情况如何?
-
没关系,我在
language = File.basename(file, '.json')中有一个错误。 File.basename 需要一个文件路径,而不是文件本身。对此感到抱歉。 -
很抱歉扮演魔鬼的拥护者,但为什么不将翻译添加到单独的表格中呢?它会更容易查询。这似乎是另一种情况,您应该正确使用关系模型。
标签: ruby-on-rails json ruby