使用i18n的mobility
gem,从CSV导入jsonb
数据的过程不成功。
然而,人们通常进口
Class.create(
name_en: row[2],
name_fr: row[3],
[...]
对于keyvalue后端中的本地驱动值,对于postgresql后端,必须用hash、键和值填充列。
但是,语法不正确name: { 'en' = row[2], 'fr' = row[2]}
导致错误syntax error, unexpected '=', expecting '.' or &. or :: or '['
和name: { 'en': row[2], 'fr': row[2]}
在语法上似乎是正确的,但产生Error importing row because 'No plugin configured for these keys: type.'
注意这发生在config/initializers/mobile.rb`中的以下任何定义中
backend :jsonb
backend :jsonb, type: :json
backend :jsonb, type: :string
设法设置了它。这其实很简单,github上的移动文档让它比实际情况更令人困惑
为每个属性设置jsonb
列的迁移,建议同时设置默认值default: {}
。
# db/migrate/20220402201700_create_articles.rb
class CreateArticles < ActiveRecord::Migration[7.0]
def change
create_table :articles do |t|
t.jsonb :title, default: {}
end
end
end
模型设置不变https://github.com/shioyama/mobility#getting-启动
# app/models/article.rb
class Article < ApplicationRecord
extend Mobility
translates :title
end
若要设置区域设置访问者,必须启用locale_accessors
插件。https://github.com/shioyama/mobility#-获取和设置翻译
# config/initializers/mobility.rb
Mobility.configure do
plugins do
backend :jsonb
locale_accessors # enable locale accessors, like 'name_en'
# ...
end
end
进口交易
Article.create(title_en: 'Importing via csv data in jsonb format',
title_fr: 'Importation via des données csv au format jsonb')
# Article.last.title_backend.read(:fr) # => "Importation via des ..."
# this doesn't work, as far as I can tell
# it'll wrap the entire hash in `en` locale
Article.create(title: { en: '', fr: ''} )
有关保存翻译的其他方法:https://github.com/shioyama/mobility#-获取和设置翻译
mobility v1.2.6
rails v7.0.2.3
ruby v3.1.1