기본 카테고리 시청 설정 초기화

안녕하세요,

모든 사용자의 기본 카테고리 시청을 초기화하려고 시도하고 있지만 성공하지 못했습니다.

설정 영역에서 카테고리가 선택되어 있지 않은 것으로 보이지만, 사용자 설정에는 일부 카테고리가 선택되어 있습니다.

안녕하세요 @ufukayyildiz

이 문제를 어떻게 진행해야 하는지 알아내셨나요? 저도 같은 작업을 하다가 일부 문제가 발생했습니다. 결국 전혀 작동하지 않았어요 ^^ 참고: Members not receiving emails from Watched category (again)

아니요, 아직은 아니에요.

사용자의 선택을 존중하도록 설계된 것으로 생각합니다. 즉, 사용자가 수동으로 카테고리를 추가하면 덮어쓰기되지 않습니다.

Rails 콘솔에서 어떤 마법을 부릴 수는 있겠지만, 더 나은 접근 방식은 사용자에게 교육하는 것이라고 생각합니다. 어떻게 생각하시나요? 아니면 어떤 경우에도 기본값을 변경해야 하는 구체적인 상황이 있으신가요?

답변해 주셔서 감사합니다.

사용자 설정을 복사할 수 있는 Rails 콘솔 명령식이 있다면 정말 좋겠습니다. 사용자 설정이 사이트 설정보다 우선한다는 설계 선택은 충분히 이해합니다. 하지만 문제는 사이트가 발전하면서 그 조직 구조도 함께 변한다는 점입니다.

저희의 경우, 모든 공지사항을 새 주제로 게시하는 조직 방식에서 전환했습니다. 그 결과, 1개의 게시글만 있는 미토론 주제들이 대량으로 프론트 페이지에 쌓였습니다. 2023년 2월에 이 문제를 처음 조사하기 시작했음을 이제야 깨달았습니다: Unlist or archive a post when it has no reply per category

이러한 공지사항들은 기한이 포함된 중요한 내용이었기 때문에, 프론트 페이지에서 숨기는 것은 선택지가 아니었습니다. 그래서 공지 유형별로 5개의 전용 주제를 두는 조직 방식으로 전환했으며, 각 게시글이 새로운 공지사항이 됩니다.[1] 여전히 이러한 게시글들이 중요하므로, 사용자가 실시간으로 알림을 받을 수 있도록 카테고리를 '관심’으로 설정해 보았습니다.

이것이 현재 user_mentioned과 digest 외에는 아무것도 받지 못하는 상황으로 이어진 시작이었습니다. 만약 모든 사용자 설정을 새 사이트 기본값으로 초기화할 수 있었다면 전환이 훨씬 쉬웠을 것입니다. 또는, 다른 아이디어로, 가상 신규 가입자의 사용자 설정을 다른 모든 사용자에게 복사하는 것도 방법일 수 있습니다.[2]

그동안, 시스템이 의도대로 작동하지 않을 수 있고, 불확정적인 기간 동안 알림 이메일이 도착하지 않을 수 있다는 사실을 사용자에게 설명해 주었습니다.


  1. 여기서 "주제에 답장"만 활성화할 수 있다면 매우 유용할 것입니다. ↩︎

  2. 현재 Rails를 통해 이것이 가능할 것이라고 상상합니다. ↩︎

다시 인사드립니다. 이 문제를 계속 조사하고 있으며, 저희 경우에는 사이트 구조가 변경되어 이메일 알림 작동 방식이 달라졌으므로 사용자 설정을 초기화하는 것이 타당합니다.

Discourse AI에서 다음과 같은 Rails 명령을 제안받았습니다:

UserOption.update_all(email_digests: true, email_level: 1, email_messages_level: 1)

이 명령이 우리가 원하는 결과를 가져올 것이라고 생각하시나요?
감사합니다!

아래 단계들이 문제를 해결한 것 같습니다!

사이트 설정에서 카테고리(31)를 기본적으로 감시(watched)하도록, 그리고 소급 적용되도록 설정했습니다.
확인:

CategoryUser.where(category_id: 31).pluck(:user_id, :notification_level)

대부분의 사용자는 제 카테고리 31에 대해 notification_level이 3입니다. :+1:

이제 이 변경 사항이 100% 효과를 내기 위해 두 가지 장벽이 있습니다:

  1. 사용자의 전역 이메일 설정.
  2. 카테고리(31) 내 각 주제에 대한 사용자의 알림 설정.

:warning: 다음 줄들은 사용자의 개인 설정을 수정합니다. 분쟁을 피하세요.

첫째, 사용자의 이메일을 "재활성화"하려면 사용자의 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)