플러그인에서 add_model_callback(DiscourseSubscriptions::Customer, :after_save) do ...를 사용하고 있습니다. 대부분의 구매는 “서버”(커스텀 모델)가 생성되도록 합니다. 오늘, 서버가 생성되는 다른 위치에서 새 서버를 구성하기 위한 페이지로 전환되도록 하는 방법을 다음과 같은 코드를 통해 배웠습니다.
Server.createServer(server).then((result) => {
if (result.server) {
this.get("servers").pushObject(EmberObject.create(result.server));
const id = result.server.id;
window.location = getURL(`/pfaffmanager/servers/${id}`);
}
이제 “구매 감사” 대화상자가 닫힌 후에도 Discourse가 해당 새 페이지로 유사하게 리다이렉트되도록 하고 싶습니다.
Rails에서든 Ember에서든 일어나는 것은 상관없지만, Ember에서 처리해야 하는 것 같습니다. 구독 플러그인의 컨트롤러/모델/그냥 아무거나를 제 플러그인에서 해킹 확장하는 방법을 정확히 이해하지 못하고 있습니다(즉, 전혀 모릅니다).
이건 정말, 아주, 아주 근접합니다. 지금 문제는 레이스 컨디션(race condition)이 있다는 겁니다. add_model_callback(DiscourseSubscriptions::Customer, :after_save) do가 제 ajax 쿼리(서버 목록을 가져오기 위한)보다 먼저 끝나지 않을 수 있거든요.
음, 그보다 더 기묘합니다. later를 사용해 ajax 호출 전에 지연을 추가해도 여전히 새 서버가 추가된 후의 목록이 아니라 오래된 목록을 가져옵니다. 다른 탭에서 창을 새로고침하면 ajax 호출 전에 올바른 데이터를 가져오는 것을 확인할 수 있습니다.
일단 여기서 포기하겠습니다. 서버가 구매 전에 이미 존재하는 경우(더 일반적인 경우라고 생각합니다–모든 것을 설정한 뒤 "네, 하자"라고 하는 경우)는 작동합니다. 다만 "네, 설치를 위해 돈을 내겠다. 먼저 결제하고 어떻게 되는지 보자"라고 하는 경우에만 문제가 있는 겁니다.