使用mobilitygem for i18n,從 CSV 匯入資料的程序jsonb不成功。
鑒于,一般進口
Class.create(
name_en: row[2],
name_fr: row[3],
[...]
對于 key_value 后端中的本地驅動值,使用postgresql 后端,必須使用散列填充列,并使用鍵和值。
但是,語法不正確
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
uj5u.com熱心網友回復:
設法設定它。這實際上很簡單,github 上的mobility 檔案讓它變得更加混亂。
使用每個屬性的列設定遷移,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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/455912.html
上一篇:如何洗掉csv列中的重復元素
