아래 단계들이 문제를 해결한 것 같습니다!
사이트 설정에서 카테고리(31)를 기본적으로 감시(watched)하도록, 그리고 소급 적용되도록 설정했습니다.
확인:
CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)
대부분의 사용자는 제 카테고리 31에 대해 notification_level이 3입니다. ![]()
이제 이 변경 사항이 100% 효과를 내기 위해 두 가지 장벽이 있습니다:
- 사용자의 전역 이메일 설정.
- 카테고리(31) 내 각 주제에 대한 사용자의 알림 설정.
다음 줄들은 사용자의 개인 설정을 수정합니다. 분쟁을 피하세요.
첫째, 사용자의 이메일을 "재활성화"하려면 사용자의 email_level을 1(즉, “부재 시”) 또는 2(“항상”)로 설정해야 합니다:
UserOption.update_all(email_level: 1)
확인:
UserOption.group(:email_level).count
X가 사용자 수일 때 => {1=>X}와 같은 결과를 얻습니다.
둘째, 주제 notification_level은 카테고리 notification_level(사이트 설정에서 수정된 것)보다 우선합니다. 가장 쉬운 방법은 주제 설정을 제거하는 것입니다. 이를 위해 단순히 주제를 하나씩 삭제합니다:
TopicUser.where(topic_id: <topic_id_nr>).destroy_all
확인:
TopicUser.where(topic_id: <topic_id_nr>).exists?
=> [ ]와 같은 결과를 얻으면, 이는 사용자가 주제 설정을 가지고 있지 않으며 카테고리 notification_level이 모든 사용자에게 기본값이 됨을 의미합니다.
참고: 어째서인지 일부 사용자는 카테고리(31)에 대한 알림 설정이 설정되어 있지 않았습니다(즉, category_user 테이블에 항목이 없음). 그들의 notification_level이 설정되어 있는지 확인하려면 notification_level 값을 가진 항목을 생성해야 합니다:
User.find_each do |user|
unless CategoryUser.exists?(user_id: user.id, category_id: 31)
CategoryUser.create!(user_id: user.id, category_id: 31, notification_level: 3)
end
end
확인:
CategoryUser.where(category_id: 31).pluck(:id, :notification_level)