# Composerからカテゴリ情報を取得する方法

**URL:** https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760
**Category:** Development
**Created:** [2021 年 5 月 18 日午前 6:38 UTC](https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760 "2021-05-18T06:38:30Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Heddson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heddson/32/96742_2.png) [@Heddson](https://meta.discourse.org/u/Heddson)
#### Post date: [2021 年 5 月 18 日午前 6:38 UTC](https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760/1 "2021-05-18T06:38:31Z")

</div>

テーマコンポーネントから、作曲器でカテゴリが選択されたときに何らかのコードを実行することは可能でしょうか？作曲器が開かれた直後と、カテゴリのドロップダウンが変更されたときに、それぞれ選択されたカテゴリを取得したいと考えています。

おそらく、作曲器コントローラーのようなコントローラーやコンポーネントを修正することで実現できるかと思ったのですが、カテゴリの情報を特定できませんでした。

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [2021 年 5 月 18 日午前 8:22 UTC](https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760/2 "2021-05-18T08:22:31Z")

</div>

Composerコントローラーで `model.categoryId` を監視し、変更が発生したときにコードを実行できます。

---

<div class="post-metadata">

### Author: ![Heddson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heddson/32/96742_2.png) [@Heddson](https://meta.discourse.org/u/Heddson)
#### Post date: [2021 年 5 月 18 日午後 9:13 UTC](https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760/3 "2021-05-18T21:13:05Z")

</div>

@fzngagan さん、ありがとうございます！

追加の質問ですが、これまでこのようなモデルは見たことがありません 🙂 。以下のような実装を考えました。どうやら機能しているようです。

```js
const { observes } = require('discourse-common/utils/decorators');
api.modifyClass("controller:composer", {
    @observes('model.categoryId')
    getCategory() {
        let categoryId = this.get("model.categoryId");
        if (categoryId == null) return;
        
        let category = this.site.categories.findBy("id", categoryId).name;
    }
});

```

この方法（または推奨される方法）は正しいでしょうか？また、ID からカテゴリ名を取得する最適な方法でしょうか？

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [2021 年 5 月 19 日午前 6:22 UTC](https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760/4 "2021-05-19T06:22:50Z")

</div>

`model` オブジェクトに何が含まれているか確認できます。すでにカテゴリ名が入っているかもしれません。

---

<div class="post-metadata">

### Author: ![Heddson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heddson/32/96742_2.png) [@Heddson](https://meta.discourse.org/u/Heddson)
#### Post date: [2021 年 5 月 19 日午前 6:31 UTC](https://meta.discourse.org/t/how-to-get-category-info-from-composer/190760/5 "2021-05-19T06:31:00Z")

</div>

「モデルオブジェクト」とは、このようなことをする必要があるという意味でしょうか？

`this.get("model")`

# 

_編集:_  
とにかく、コードは完璧に動作しています。改めてありがとうございます！
