"Применение настроек пользователя по умолчанию исторически" — это улица с односторонним движением

Когда значение опции пользователя по умолчанию изменяется с false на true, оно не работает как положено.
Система не запрашивает, следует ли применить настройку к существующим пользователям, и даже если бы запрашивала, это всё равно не сработало бы.

Шаги воспроизведения:

  • Убедитесь, что включена настройка, например, «Открывать внешние ссылки в новой вкладке».
  • В админ-панели перейдите в Настройки → Предпочтения пользователей и включите default_other_external_links_in_new_tab.
  • Затем отключите default_other_external_links_in_new_tab в том же разделе.
  • Появится всплывающее окно: «Хотите применить это изменение к истории? Это изменит предпочтения для X существующих пользователей». Выберите «Да».
  • Теперь у всех пользователей опция «Открывать внешние ссылки в новой вкладке» отключена.

Пока всё верно, но дальше:

  • Снова включите default_other_external_links_in_new_tab в админ-панели.
  • Всплывающее окно не появляется, и настройка остаётся отключённой для всех.

Ожидаемое поведение на последнем шаге:

  • Должно появиться всплывающее окно: «Хотите применить это изменение к истории? Это изменит предпочтения для X существующих пользователей». При выборе «Да» опция должна быть включена для всех.

Это касается всех предпочтений пользователей с префиксом default_.

Похоже, проблема связана с этим местом и этим:

previous_value = SiteSetting.public_send(id) || "" if update_existing_users

Здесь previous_value устанавливается в "", если значение настройки false, а затем:

UserOption.where(user_option => previous_value).update_all(attrs)

и

json[:user_count] = UserOption.where(user_option => previous_value).

ничего не делают.

9 лайков

Вот запрос на слияние (PR):

4 лайка

Эта тема была автоматически закрыта через 3 дня после последнего ответа. Новые ответы больше не принимаются.