デフォルトのユーザーオプションが false から true に設定された場合、期待どおりに動作しません。
既存のユーザーに変更を適用するかどうか尋ねられず、たとえ尋ねられたとしても機能しません。
再現手順:
- 「外部リンクを新しいタブで開く」のような設定を有効にする
- 管理 - 設定 - ユーザー設定 -
外部リンクを新しいタブで開くを有効にする - 管理 - 設定 - ユーザー設定 -
外部リンクを新しいタブで開くを無効にする - ポップアップ
この変更を履歴に適用しますか?これにより、X 人の既存ユーザーの設定が変更されます。が表示され、「はい」を選択する - すべてのユーザーで「外部リンクを新しいタブで開く」が無効になる
ここまでは順調ですが:
- 管理 - 設定 - ユーザー設定 -
外部リンクを新しいタブで開くを有効にする - ポップアップは表示されず、全員に対して無効のままです。
期待される最後のステップ:
- ポップアップ
この変更を履歴に適用しますか?これにより、X 人の既存ユーザーの設定が変更されます。が表示され、「はい」を選択すると全員に対して有効になる
これはすべての default_ ユーザー設定に当てはまります。
previous_value = SiteSetting.public_send(id) || "" if update_existing_users
これは、設定が false の場合に previous_value を "" に設定し、
UserOption.where(user_option => previous_value).update_all(attrs)
そして
json[:user_count] = UserOption.where(user_option => previous_value).
は何も行いません。