Rails i18n API Тройные тире / дефисы, эллипсы и переводы строк

0

Я использую 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
  • 0
    Можно добавить источник модели перевода? (похоже, что установщик для атрибута значения переопределяется)
  • 0
    Я добавил это к первоначальному вопросу
Теги:
internationalization
rails-i18n

1 ответ

1
Лучший ответ

То, что вы используете в столбце value - это значение, сериализованное в YAML (это сделано с помощью I18n::Backend::ActiveRecord::Translation); что требуется, среди прочего, для плюрализации.

#find_or_create_by не работает хорошо, когда значение, хранящееся в базе данных, требует сериализации

Чтобы сделать простую семенную попытку:

Translation.create_with(value: 'value1').find_or_create_by(locale: 'en', key: 'key1')
  • 0
    Я изменил свой код как: Translation.find_or_create_by (локаль: 'en', ключ: 'key1'). Update_attributes (: value => 'value1'), и это также сработало. Несмотря на то, что я получил решение, мне было интересно, для чего нужны эти ценности, теперь я получил и его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню