토픽 답변을 날짜순으로 정렬하는 방법은?

안녕하세요. 이것이 가능한지 모르겠고, 가능하다면 구글링을 많이 해 보았지만 이에 대해 아무것도 찾지 못했습니다. 하지만 제 포럼의 모든 토픽에 있는 모든 답변을 생성 날짜 기준으로 정렬하고 싶습니다.

저는 구형 포럼에서 완전히 새로운 Discourse로 데이터를 마이그레이션하는 작업을 하고 있습니다. 이를 위해 답변이 처음 생성된 날짜로 Discourse에 전송할 수 있도록 API를 통해 토픽과 답변을 재생성하고 있습니다. 이 방법은 잘 작동하고 있으며, Discourse에서 생성된 답변을 확인하면 원래 날짜가 그대로 표시되는 것을 볼 수 있습니다.

하지만 모든 답변이 원래 날짜를 가지고 있음에도 불구하고, API를 통해 생성된 순서대로 정렬되어 있습니다. 이것이 버그인지, 의도된 동작인지, 아니면 API POST 호출에서 설정한 날짜 기준으로 정렬할 수 있는 방법이 있는지 모르겠습니다. 만약 방법이 있다면 이 주제에 대해 도움을 주시면 감사하겠습니다. 감사합니다.

현재 사용 중인 버전은 2.8.8입니다.

그렇게 하지 마세요. 가져오기(import) 스크립트를 사용해야 합니다. 예시를 확인하려면 discourse/script/import_scripts at main · discourse/discourse · GitHub 를 참고하고, 다른 포럼에 대한 가져오기 스크립트 실행 방법을 여기에서 검색해 보세요.

게시물은 생성된 순서대로 표시됩니다. 따라서 (실제로는 사용하길 원하지 않는) API 스크립트를 사용하여 게시물을 올바른 순서로 생성해야 합니다.

음, 답변해 주셔서 감사합니다. 얼마 전에는 스크립트를 사용하는 방안을 생각해 봤지만, Discourse에는 테이블 간 관계가 너무 복잡해서 API를 통해 진행하기로 했습니다. 그런데 테이블 하나에 데이터를 삽입한 후 나머지 관계는 Discourse가 자동으로 처리하도록 하는 스크립트를 만들 수 있는 방법이 있을까요? 그렇게 하면 제 작업이 훨씬 쉬워질 것 같습니다.

하지만 제 말은, 지금까지 API를 통한 마이그레이션은 잘 작동해 왔다는 겁니다. Discourse가 실제로 created_at 속성으로 정렬해서 표시하지도 않는데, 엔드포인트를 통해 게시물을 생성할 때 이 속성을 보낼 수 있다는 것이 무슨 의미가 있을까요… 이건 기능 요청이 되어야 하는 것 아닌가요?

네, 실제로 그런 방법이 있습니다! 예시를 링크로 첨부해 드렸습니다.

그것이 사실이라면, 여러분은 이 게시물을 올리지 않았을 것입니다. :wink:

아니요, 왜냐하면 여러분의 문제를 해결하는 방법은 제가 링크한 수십 개의 예시 중 하나를 사용하는 것이기 때문입니다. 훨씬, 훨씬 더 쉬울 것이라고 약속합니다. 저는 루비를 제대로 배우기 전에 이미 여러 개의 가져오기(import) 스크립트를 작성해 보았거든요.

API를 사용하더라도 여전히 created_at 순서대로 게시물을 생성해야 합니다. 플러그인(혹은 테마 컴포넌트?)에서 정렬하는 방법이 있지만, 그렇게 하지는 않는 것이 좋습니다.

@JammyDodger 님은 rake 태스크가 있다고 지적합니다.

    rake posts:reorder_posts

이것이 여러분의 문제를 해결해 줄 수 있을 것입니다. 수십 개의 주제와 몇백 개의 게시물만 가져오는 것이라면, 이 방법을 시도해 볼 수 있습니다.

알겠습니다. 제 아이디어를 계속 진행할 생각인데, 게시글을 생성할 때 POST 호출에서 created_at 속성에 대해 궁금해서 물어본 겁니다. 게시글을 이 속성으로 정렬할 수 없는 것 같으니, 사실상 쓸모없는 속성인 것 같습니다. 그래도 감사합니다.

참고로, 게시물이 단순히 생성 날짜 기준으로 정렬되지 않는 이유는 게시물을 한 주제에서 다른 주제로 이동하는 기능을 지원하도록 설계되어 있기 때문입니다. 이러한 시나리오에서 날짜가 겹칠 경우 게시물이 ‘섞여 버리는’ 현상은 덜 바람직하다고 판단되었기 때문입니다.

이에 대한 이전 토론은 다음과 같습니다:

마이그레이션을 가장 잘 수행하는 방법에 대해, 제이(Jay)의 의견에 동의합니다. 여기서 이전 사례(prior art)를 따르는 것이 더 나은 선택일 가능성이 높습니다. 웹 API는 아니지만, 기존 스크립트는 이러한 점을 고려하여 저 수준의 일종의 '마이그레이션 API’에 의존하고 있습니다.

웹 API는 주로 프론트엔드 Discourse 앱을 위한 API로 설계되었습니다. 다양한 통합에 성공적으로 사용되고는 있지만, 이는 그 주된 목적에 최적화되어 있습니다.

쓸모없는 게 아닙니다. 광고된 대로 created_at 날짜를 설정합니다. 게시물을 생성하기 전에 created_at 기준으로 정렬하면 됩니다.