Как обновить атрибуты для разных локалей в интерфейсе администратора, используя Globalize и Active Admin в Rails - PullRequest
0 голосов
/ 02 апреля 2020

есть ли у кого-нибудь опыт работы с Active Admin и Globalize gem? Я работаю над приложением, которое должно быть интернационализировано и нуждается в интерфейсе администратора.

Я хочу редактировать / создавать атрибуты модели для каждой локали, используя одну форму в ActiveAdmin, или иметь возможность легко обновлять атрибуты модели для локали используя интерфейс ActiveAdmin.

Я работаю с моделью блога, с полями «Заголовок», «Автор», «Контент». После внедрения гема globalize эти поля были удалены из таблицы Blog во вновь созданную таблицу blog_translations. Это означает, что столбцы больше не видны в исходной таблице «Блог» и появились в отдельной таблице переводов.

Это схема после реализации Globalize.

      create_table "blog_translations", force: :cascade do |t|
        t.bigint "blog_id", null: false
        t.string "locale", null: false
        t.datetime "created_at", null: false
        t.datetime "updated_at", null: false
        t.string "title"
        t.string "author"
        t.text "content"
        t.index ["blog_id"], name: "index_blog_translations_on_blog_id"
        t.index ["locale"], name: "index_blog_translations_on_locale"
      end

      create_table "blogs", force: :cascade do |t|
        t.datetime "created_at", null: false
        t.datetime "updated_at", null: false
      end

Они связан с таблицей перевода с помощью директивы translates.

class Blog < ApplicationRecord
  has_one_attached :photo
  translates :title, :author, :content, touch: true
  globalize_accessors :locales => [:en, :lo]
end

Я впервые использую Globalize и Active Admin. Я изо всех сил пытаюсь показать «Заголовок», «Содержание», «Автор», потому что они прикреплены к таблице blog_translations, и когда Active Admin отображает атрибуты модели для обновления, их там нет, потому что они не существуют в исходной модели.

После выполнения настройки Globalize, насколько я вижу, не создается каждая новая модель для blog_translations в папке моделей rails.

При создании ресурса Active Admin поля ввода отсутствуют появляются потому, что они были перемещены в таблицу Blog_translations

ActiveAdmin.register Blog do
  permit_params :title, :author, :content
end

Я нашел гем под названием globalize-accesors, который дает вам простой доступ (чтение и запись) глобализировать переведенные поля, не вмешиваясь в локаль. Процитируем документацию: «Предоставляет вам доступ к методам: title_pl, title_en, title_pl =, title_en =. Они беспрепятственно работают с Globalize (даже не затрагивая заголовок «core», title = методы, используемые самой Globalize).

Мне известен гем Active Admin Globalize, который больше не поддерживается и с тех пор устарел, так что это больше не вариант.

Кто-нибудь знает, как я могу получить доступ к атрибутам блога в ActiveAdmin, даже если в самой модели поля не существуют? Есть ли способ создания интерфейса, который позволяет мне легко обновлять поля для каждой локали в модели в Active Admin с помощью globalize?

В моей голове, единственный способ представить эту работу - создать какую-то настраиваемую форму с дублирующимися полями для каждой локали. Когда отправляется запрос POST для создания нового блога, я думаю о том, как захватить эти поля с помощью параметров и настроить их вручную в контроллере блога, используя средства доступа Globalize для каждого поля?

Было бы замечательно, если бы у кого-нибудь был совет, как сделать эту работу. Или если у них есть опыт использования Active Admin с Globalize.

Спасибо за вашу помощь.

...