Когда значение опции пользователя по умолчанию изменяется с 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).
ничего не делают.