martin
(Martin Brennan)
6월 29, 2026, 3:53오전
20
네, 확인했습니다. 실제로 그렇습니다:
코드에서 이 동작의 원인을 찾았습니다:
new_results = remove_muted(new_results, @user, options)
new_results = remove_dismissed(new_results, @user)
unread_results =
apply_max_age_limit(TopicQuery.unread_filter(base, whisperer: @user&.whisperer?), options)
base.joins_values.concat(new_results.joins_values, unread_results.joins_values)
base.joins_values.uniq!
results = base.merge(new_results.or(unread_results))
results = results.order("CASE WHEN topics.user_id = tu.user_id THEN 1 ELSE 2 END")
suggested_ordering(results, options)
end
def unseen_filter(list, user_first_seen_at, whisperer)
list = list.where("topics.bumped_at >= ?", user_first_seen_at)
col_name = whisperer ? "highest_staff_post_number" : "highest_post_number"
list.where("tu.last_read_post_number IS NULL OR tu.last_read_post_number < topics.#{col_name}")
end
독립적인 읽지 않음(Unread) 목록이 사용하는 로직입니다:
def unread_results(options = {})
result =
TopicQuery.unread_filter(
default_results(options.reverse_merge(unordered: true)),
whisperer: @user&.whisperer?,
).order("CASE WHEN topics.user_id = tu.user_id THEN 1 ELSE 2 END")
새로움(New)과 읽지 않음(Unread)을 하나의 목록으로 통합하고 있으므로, 동일한 규칙을 따르는 것이 타당하다고 생각합니다… 하지만 다른 의견도 들을 수 있습니다. 저에게는 선호하는 방식이 없습니다.
@sam 와 @osama 님, 이 목록을 처음 구현하신 분들이시죠. 어떻게 생각하시나요? “전체(All)” 목록에서 읽지 않은 상태인 현재 사용자의 주제를 맨 위로 올리는 규칙을 따라야 할까요? 아니면 “전체” 목록에서는 단순히 활동(Activity) 기준으로 정렬하고, 특별한 읽지 않음 정렬은 답글(Replies) 탭에만 적용하는 것이 좋을까요?
1개의 좋아요