---
# System prepended metadata

title: ヒンタス質問投稿ページ・質問投稿機能 実装内容

---

# ヒンタス質問投稿ページ・質問投稿機能 実装内容

## 概要
ヒンタスの質問投稿・回答機能を実装したので、コードロジックについて解説する。

## 目的
他のエンジニアから見ても、質問投稿・回答機能のロジックについて把握できる状態。


## 関連ファイル説明
### hintas-beta
#### Storeに関するファイル
- 【新規】src/store/skill/SkillNewStore.js
- 【新規】src/action/skill/SkillNewActionCreator.js

**SkillNewStore.js**
質問投稿フォーム表示判定のstore「isQuestionForm」を管理する。

**SkillNewActionCreator.js**
isQuestionFormの値を変更する関数「changeIsQuestionForm」を設置している。

#### 質問フォームに関するファイル
- 【既存】src/service/skill/SkillAddEntryService.js
- 【既存】src/service/skill/SkillBaseService.js
- 【新規】src/service/skill/SkillQuestionAddService.js
- 【新規】src/view/skill/SkillQuestionAdd.js
- 【新規】src/view/skill/SkillQuestionForm.js
- 【既存】src/component/skill/SkillContentTextArea.js

**SkillAddEntryService.js**
App.jsでimportしており、skill/newにアクセスしたら一番最初に呼び込まれる。
isQuestionFormがtrueな場合は、SkillQuestionAddService.jsが読み込まれる。

**SkillBaseService.js**
SkillQuestionAddService.jsなど、スキル追加、編集系ファイルのスーパークラス。

**SkillQuestionAddService**
質問投稿のメインとなるjsファイル。
作成するskillのレコードが「create_type=5」になる様にparamsを設定している。

#### Footerに関するファイル
- 【既存】src/view/common/Footer.js
- 【新規】src/view/common/FooterSubMenu.js
- 【新規】src/view/common/FooterSubMenuButton.js

### hintas-server
- 【既存】app/model/skill.rb
- 【既存】app/model/skills/info.rb

**skill.rb**
create_typeのenumに、「question: 5」を新たに追加。

**info.rb**
「create_type=5」な場合infoを同時生成しない様に設定している。

## 処理の流れ
抽象的な流れは、以下のようになっている。
1. Footerから「質問する」をクリックしたら、store「isQuestionForm」がtrueになる
2. 「skill/new」にアクセスし、SkillAddEntryServiceService.jsでSkillQuestionAddService.jsがrenderされる
3. フォームで質問送信後、質問のskillレコードが作成される

### 1. Footerから「質問する」をクリックしたら、store「isQuestionForm」がtrueになる
footerで読み込んでるFooterSubMenuButton.jsのボタンをクリック後、
SkillNewActionCreatorのchangeIsQuestionFormが実行され、isQuestionFormがtrueに変更される。
なおSkillQuestionAddService.jsでgetSkillNewStore（）を実行しSkillNewStoreのインスタンスを生成している為、FooterからisQuestionFormの値を変更できる様になっている。

### 2. 「skill/new」にアクセス後、SkillAddEntryServiceService.jsでSkillQuestionAddService.jsが読み込まれる
SkillQuestionAddService.jsから取得したisQuestionFormの値がtrueなので、SkillQuestionAddServiceが読み込まれる。

### 3. フォームで質問送信後、質問のskillレコードが作成される
SkillQuesitonAddService.jsでparamsを設定している為、「create_type=5」の状態でスキルのレコードが作成される。