# 購入後のページへのリダイレクト

**URL:** <https://meta.discourse.org/t/redirect-to-page-after-purchase/239146>\
**Category:** Development\
**Tags:** subscriptions\
**Created:** [2022 年 9 月 15 日午後 10:25 UTC](https://meta.discourse.org/t/redirect-to-page-after-purchase/239146 "2022-09-15T22:25:37Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022 年 9 月 18 日午後 9:58 UTC](https://meta.discourse.org/t/redirect-to-page-after-purchase/239146/3 "2022-09-18T21:58:57Z")

</div>

> [@merefield](#):
>
> おそらく `closeModal` というアクションがあるはずです（ルートにあるかもしれません）。

いや、正確には違います。しかし、奇跡的にそれで十分でした！これを見つけました：

> <https://github.com/discourse/discourse-subscriptions/blob/main/assets/javascripts/discourse/controllers/subscribe-show.js#L72-L82>

そして、これを行いました!!

```javascript
      api.modifyClass("controller:subscribe-show", {
        pluginId: "pfaffmanager",
        async _advanceSuccessfulTransaction(plan) {
          window.console.log("modifying subscription!!!", plan, this);
          this.alert("plans.success");
          this.set("loading", false);
          let servers = [];
          servers = await Server.listServers().then((result) => {
            if (currentUser && currentUser.servers !== undefined) {
              servers = currentUser.servers.sort((b, a) => {
                return ("" + a.updated_at).localeCompare(b.updated_at);
              });
              window.console.log("sorted servers", servers);
              if (servers.length > 0) {
                window.console.log(`going to first! ${servers[0].id}`);
                this.transitionToRoute(
                  "pfaffmanager.servers.show",
                  servers[0].id
                );
              } else {
                window.console.log(`server not found. going to index!`);
                this.transitionToRoute("pfaffmanager.servers.index");
              }
              // window.location = getURL(`/`);
              // window.location = getURL(`/pfaffmanager/servers/${id}`);
            }
          });
        },
      });

```

これは非常に、非常に近いものです。問題は、`add_model_callback(DiscourseSubscriptions::Customer, :after_save) do` が、サーバーを取得するための ajax クエリを実行する前に終了しない可能性があるため、競合状態が発生していることです。

いや、もっと奇妙です。遅延（`later` を使用して）を追加して ajax 呼び出しを実行しても、新しいサーバーがコールバックで追加された後のリストではなく、古いリストを取得しています。別のタブでウィンドウを更新すると、ajax 呼び出しを実行する前に正しいデータを取得していることがわかります。

今は諦めることにします。サーバーが購入前に存在する場合（おそらくより一般的だと思います。すべてを設定してから「はい、やりましょう」と言うでしょう）、それは機能します。問題は、「はい、インストールに支払いたい。支払ってからどうなるか見てみよう」と言う場合です。

---

_[View the full topic](https://meta.discourse.org/t/redirect-to-page-after-purchase/239146)._
