CSS가 제가 놓치고 있던 부분이었지만, 몇 가지를 시도해 봤는데 잘 작동하지 않는 것 같습니다.
제가 영어를 모국어로 사용하지 않아서 설명이 부족했던 것 같습니다.
1번 항목에서 알림은 '일반(Normal)'보다 아래로 설정되어야 하며, 특정 카테고리는 숨겨져야 합니다.
CSS에서는 카테고리 클래스를 가져와 숨기는 것은 가능하지만, 그렇게 하면 '관심(Watching)'과 '추적(Tracking)'까지 함께 지워지는 것 같습니다… 각 주제의 알림 설정에 기반하여 클래스를 부여하는 방법을 찾아보겠습니다.
또한, 조금 조사해 보니 상단에서 카테고리를 제거할 수 있는 기능이 약 2년 전부터 큰 논쟁이 된 기능이었고, 결국 제거되어 ‘무음(mute)’ 기능으로 대체되었습니다.
전체적으로 무음 기능으로 대체하는 것에 반대했던 사람들의 주장이 옳았다고 생각합니다. 무음은 좋은 기능이지만, '일반’과 ‘무음’ 사이의 간격이 너무 크고, 무음 설정 시 해당 카테고리가 너무 뒤로 밀려납니다.
플러그인을 좀 살펴봤는데 쉽지는 않아 보입니다… result = Topic::ActiveRecord 안쪽을 들여다봤는데, 알림과 관련된 데이터가 포함된 것 같지는 않네요.
또한, 여기서 개별 토픽에 대한 정보를 가져와서 notification_level을 조회할 수 있을지 궁금합니다.
저도 Ruby를 일부 사용하는 플러그인을 만들어 본 적은 있지만, 대부분은 JavaScript에 의존했기 때문에 Ruby에 대해 잘 모릅니다.
아마… "result"의 내용을 foreach로 순회하면서 각 토픽에 대한 상세 정보를 가져오고, notification_level이 “Tracking” 또는 "Watching"인 토픽의 ID만 목록에 기록한 뒤, where 절에 "OR"를 추가하면 잘 작동할 것 같습니다. topics.topic_id IN (#{topic_ids.join(',')"를 사용하면 될 것 같은데요. 코드 양식이 좀 미려하지는 않고, Ruby에 익숙하지 않아서 실제로 작동할지 확신은 못 하겠습니다…
result.where("topics.category_id NOT IN (#{category_ids.join(",")})")
에서
result.where("topics.category_id NOT IN (#{category_ids.join(",")}) OR tu.notification_level IN (2,3)")
으로 변경했습니다.
이렇게 하면 “추적(Tracking)” 및 “주시(Watching)” 상태의 토픽은 첫 페이지에 유지되지만, “보통(Normal)” 상태의 토픽은 첫 페이지에서 숨겨집니다.
ActiveRecord를 제대로 이해하지 못해서 시간이 좀 걸렸지만, 문제를 제대로 설명했더라면 여러분에게는 쉬운 문제였을 수도 있었을 것입니다.
정확히 이해하고 있는지 100% 확신은 없는데, default categories muted 관리자 설정에서 카테고리를 '기본 음소거’로 설정하면 비슷한 효과를 낼 수 있는 것 같네요. 해당 카테고리의 주제들은 최신 목록에는 표시되지 않지만, 카테고리 페이지로 들어가면 모두 확인할 수 있습니다. 그리고 사용자가 어떤 주제와 상호작용하여 추적 또는 관찰 대상으로 설정하게 되면, 그런 주제들은 사용자의 주제 목록에 표시됩니다.
이 토픽 수를 가져오기 위해 컴포넌트를 만들었지만, Mute는 Mute된 토픽이 NewTopics에 집계되지 않기 때문에 NewTopics 수를 가져오지 못한다는 사실을 깨달았습니다.
이 토픽 수를 가져오기 위해 컴포넌트를 만들었으나, Mute에서는 NewTopics를 가져오지 못해 새로운 토픽의 수를 확인할 수 없었습니다.
그래서 알림 설정을 Normal로 유지하면서 이 항목이 상단 페이지에 표시되지 않도록 하는 방법을 찾던 중이었습니다.
이는 아마도 특수한 상황일 수 있습니다. 특정 카테고리에서 홈 페이지에 원치 않는 수의 읽지 않은 토픽이 표시되는 반면, 기본값을 Mute로 설정하면 새로운 토픽을 알아채기 어려워 사용자가 해당 카테고리에서 과도하게 이탈하게 됩니다. 상단 페이지에 많은 토픽이 표시된다는 것은 해당 카테고리가 매우 활성화되어 있음을 의미하므로, 우리는 이를 원하지 않았습니다.
아마도 사용자를 교육함으로써 해결했어야 할 문제일 수도 있지만, 우리는 가능한 한 최선을 다하고 싶었고, 요구사항을 충족할 수 있어 기쁩니다.