Я использую API i18n для определенной цели. Я использую базу данных MySQL:
Translation.find_or_create_by(locale: 'en', key:'key1', value: 'value1')
Однако после семени данные сохраняются в базе данных следующим образом:
locale: en
key: key1
value: --- value1\n...\n
Все столбцы - varchar (255) и "utf8_unicode_ci".
В документации Rails i18n я не мог найти объяснения этого.
Из-за этой проблемы я не могу использовать метод find_or_create_by(). Он делает/не может проверить столбец значений и добавляет повторяющиеся записи.
Есть ли для этого решение?
Перевести модель:
Translation = I18n::Backend::ActiveRecord::Translation
if Translation.table_exists?
I18n.backend = I18n::Backend::ActiveRecord.new
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::Simple.new, I18n.backend)
end
То, что вы используете в столбце value
- это значение, сериализованное в YAML (это сделано с помощью I18n::Backend::ActiveRecord::Translation
); что требуется, среди прочего, для плюрализации.
#find_or_create_by
не работает хорошо, когда значение, хранящееся в базе данных, требует сериализации
Чтобы сделать простую семенную попытку:
Translation.create_with(value: 'value1').find_or_create_by(locale: 'en', key: 'key1')