Создание плагина для связи Пользователь - Тег

Вы можете сделать это с помощью простого плагина.

Что нужно сделать

Плагин должен выполнять следующие действия:

  1. Добавить пользовательское поле known_tags (список строк).

  2. Добавить интерфейс в профиле пользователя, где можно редактировать known_tags. Не думаю, что необходимо создавать отдельную вкладку профиля для этого, но вы можете сделать это, если захотите. Если вы не хотите, чтобы пользователи редактировали это сами, просто сделайте поле доступным для редактирования только администраторами и обновляйте его в профилях пользователей на основе вашего CSV-файла.

  3. Добавить обработчик событий, который использует события before_create_post или post_created в PostCreator, чтобы добавлять нужный контент в пост на основе тегов темы.

Как это сделать

Части 1 и 2 очень похожи на примеры плагинов для других моделей в теме, ссылка на которую приведена ниже. Попробуйте разобраться по аналогии. Если вы совсем застрянете, спросите меня, и я подскажу.

Часть 3 также будет находиться в вашем файле plugin.rb. Она будет выглядеть примерно так:

on(:post_created) |post, opts, user|
  if post.is_first_post? && post.topic.tags.present?
     user_ids = UserCustomField.where(name: 'known_tags', value: post.topic.tags).pluck(:user_id)
     usernames = User.where(id: user_ids).pluck(:username)
     new_raw = post.raw + "something something #{usernames}"
     PostRevisor.new(post).revise!(
      user,
      {
        raw: new_raw,
        edit_reason: "some reason"
      },
      skip_validations: true,
      bypass_bump: true
    )
  end 
end

Попробуйте сделать это самостоятельно. Если вы совсем застрянете, я помогу. Я всегда охотнее помогаю, если вижу, что вы пытаетесь разобраться сами :slight_smile: