通过 jsonb 格式的 csv 数据导入
Importing via csv data in jsonb format
使用 mobility
gem for i18n,从 CSV 导入数据的过程 jsonb
数据不成功。
然而,一个通常是进口的
Class.create(
name_en: row[2],
name_fr: row[3],
[...]
对于 key_value 后端中的本地驱动值,具有 postgresql backend 的列必须使用哈希、键和值进行填充。
但是,语法不正确
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/mobility.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-started
# app/models/article.rb
class Article < ApplicationRecord
extend Mobility
translates :title
end
要设置语言环境访问器,必须启用 locale_accessors
插件。
https://github.com/shioyama/mobility#-getting-and-setting-translations
# 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#-getting-and-setting-translations
mobility v1.2.6
rails v7.0.2.3
ruby v3.1.1
使用 mobility
gem for i18n,从 CSV 导入数据的过程 jsonb
数据不成功。
然而,一个通常是进口的
Class.create(
name_en: row[2],
name_fr: row[3],
[...]
对于 key_value 后端中的本地驱动值,具有 postgresql backend 的列必须使用哈希、键和值进行填充。
但是,语法不正确
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/mobility.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-started
# app/models/article.rb
class Article < ApplicationRecord
extend Mobility
translates :title
end
要设置语言环境访问器,必须启用 locale_accessors
插件。
https://github.com/shioyama/mobility#-getting-and-setting-translations
# 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#-getting-and-setting-translations
mobility v1.2.6
rails v7.0.2.3
ruby v3.1.1