通过jsonb格式的csv数据导入



使用i18n的mobilitygem,从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.6rails v7.0.2.3ruby v3.1.1

相关内容

  • 没有找到相关文章

最新更新