Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FAQにカテゴリを追加する #7093

Merged
merged 101 commits into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
a6e2b44
FAQモデルを作った
yuma-matsui Jul 12, 2023
9bd837d
FAQモデル用のlocalesを追加した
yuma-matsui Jul 13, 2023
ac816ca
管理者ページにFAQの一覧表示、新規作成機能を追加した
yuma-matsui Jul 13, 2023
c1c5ab7
FAQの編集、更新機能を追加した
yuma-matsui Jul 13, 2023
634ef8f
FAQの削除機能を追加した
yuma-matsui Jul 13, 2023
0041891
faqに関するseedデータを用意した
yuma-matsui Jul 13, 2023
372726f
FAQ一覧ページでFAQのデータを表示するようにした
yuma-matsui Jul 13, 2023
b5b7c50
FAQを作成した順で表示するようにした
yuma-matsui Jul 14, 2023
4555b22
FAQの作成をMarkdownで行えるようにした
yuma-matsui Jul 14, 2023
04a9757
FAQ一覧ページのシステムテストを書いた
yuma-matsui Jul 14, 2023
2e41701
FAQHelperのテストを書いた
yuma-matsui Jul 14, 2023
76e2b6b
管理ページのFAQに関するシステムテストを書いた
yuma-matsui Jul 14, 2023
1a7d034
FAQの追加に伴う既存テストの修正
yuma-matsui Jul 14, 2023
34bfb14
FAQ一覧ページのシステムテストを修正した
yuma-matsui Jul 14, 2023
0fd3584
circleCIのテストを通すためにクラス名を変更した
yuma-matsui Jul 14, 2023
f3dd78e
FAQの表示を作成時間が古い順に変更した
yuma-matsui Jul 14, 2023
04015a7
FAQHelperの実装を変更して常時?マークが1つだけ表示されるようにした
yuma-matsui Jul 16, 2023
15a568b
本番環境にFAQのデータを投入するためのスクリプトファイルを用意した
yuma-matsui Jul 16, 2023
d9e9f62
ページ上部の表示漏れを修正した
yuma-matsui Jul 16, 2023
067c205
FAQの詳細ページを用意した
yuma-matsui Jul 16, 2023
acf10f7
FAQ更新時のリダイレクト先を個別ページに変更した
yuma-matsui Jul 16, 2023
fd6d8e4
管理者ページでFAQタブをクリックしている状態でアクティブにならないバグを修正した
yuma-matsui Jul 16, 2023
9282de8
詳細ページにヘッダーを追加した
yuma-matsui Jul 16, 2023
772e3ee
FAQテーブルにpositionカラムを追加した
yuma-matsui Jul 21, 2023
18eb608
管理ページでFAQの並び替えを行えるようにした
yuma-matsui Jul 28, 2023
f2c2437
circleCIを通すためにテストのクラス名を変更した
yuma-matsui Jul 29, 2023
d339cda
テスト名のタイポを修正した
yuma-matsui Aug 2, 2023
c2db540
FAQテーブルのanswerカラムをtext型に変更した
yuma-matsui Aug 2, 2023
9763ca0
質問の入力フォームをtext_areaからinputに変更した
yuma-matsui Aug 3, 2023
ad6f76d
デザインの構造をざっと構築
machida Aug 30, 2023
c6e1cd1
Admin の FAQ詳細にデザイン入れた
machida Aug 31, 2023
d6a485c
新デザインを適用した
machida Oct 8, 2024
3b694b8
FAQモデル用のlocalesを追加した
yuma-matsui Jul 13, 2023
ac9ef5d
FAQの編集、更新機能を追加した
yuma-matsui Jul 13, 2023
fbe7ba8
FAQ一覧ページでFAQのデータを表示するようにした
yuma-matsui Jul 13, 2023
0fcf324
FAQの作成をMarkdownで行えるようにした
yuma-matsui Jul 14, 2023
46a4f27
FAQの追加に伴う既存テストの修正
yuma-matsui Jul 14, 2023
2057030
FAQHelperの実装を変更して常時?マークが1つだけ表示されるようにした
yuma-matsui Jul 16, 2023
031df9e
FAQの詳細ページを用意した
yuma-matsui Jul 16, 2023
712442f
デザインの構造をざっと構築
machida Aug 30, 2023
e77a8c2
ja.ymlにカテゴリを追加
sochi419 Feb 11, 2024
648dd45
クエリパラメータにカテゴリ情報を追加
sochi419 Feb 20, 2024
f5bba8b
adminページのfaqのradioボタンを実装(仮)
sochi419 Feb 27, 2024
23de8ca
formヘルパーを用いたradioボタンを実装
sochi419 Feb 27, 2024
9fafb73
編集画面、新規作成画面からカテゴリ選択できるようにした
sochi419 Feb 28, 2024
956bc03
ja.ymlに記載した文字を使った処理に修正
sochi419 Feb 28, 2024
3c02730
faqテーブルのcategoryにnot null制約を追加
sochi419 Feb 28, 2024
24a6530
category未選択時のエラー対応のため、Faqmodelにvalidateを追加
sochi419 Feb 28, 2024
0265936
seedのデータ修正、カテゴリタブをrenderを使って呼び出す処理に修正
sochi419 Mar 3, 2024
3a8ba09
rubocop対応
sochi419 Mar 5, 2024
334caab
コードの冗長部分を修正
sochi419 Mar 5, 2024
c61156c
rubocop違反を再修正
sochi419 Mar 5, 2024
aca203c
seedにtypoがあったので修正
sochi419 Mar 5, 2024
50e8044
test/fixtures/faqs.ymlのデータに、カテゴリ情報を追加
sochi419 Mar 5, 2024
2d43d82
既存のyumaさんが実装したfaq関連のtestが落ちてしまう問題を修正
sochi419 Mar 5, 2024
dbacd47
faqページでカテゴリ毎にfaqを表示する確認のtestを追加
sochi419 Mar 5, 2024
1577fa1
admin/faqの個別ページにカテゴリを追加
sochi419 Mar 5, 2024
db54741
faqs_categoryテーブルを作成, faqテーブルにあったcategoryのcalumnを削除
sochi419 Mar 25, 2024
a453364
DB構造の修正に伴い、model, controller, viewsを修正した
sochi419 Mar 26, 2024
891c0fb
test/fixtures/faqs.ymlの記述を修正
sochi419 Mar 26, 2024
20a5bf5
Zeitwork::NameErrorに対応
sochi419 Mar 26, 2024
6a7425a
ymlファイルに時間情報を追加、テストの一部を修正
sochi419 Mar 27, 2024
f282e6b
落ちるテストを修正
sochi419 Mar 27, 2024
81fe5b9
テーブルのカラムに、null制約を追加
sochi419 Mar 27, 2024
d485923
ymlファイルのデータの記述を修正、testを修正
sochi419 Apr 16, 2024
e0af99c
slim lintの指摘点を修正
sochi419 Apr 16, 2024
c46b643
nameのvalidateを追加
sochi419 Apr 26, 2024
2cb8d29
モデル名を変更
sochi419 May 5, 2024
c62bacf
モデル名の修正に合わせて、DBのカラム名を変更。
sochi419 May 6, 2024
69f5fb5
controller名とファイル名変更、nameカラムにunique制約追加
sochi419 May 6, 2024
e7b07a8
データの記載場所をviews → controllerに移動
sochi419 May 7, 2024
3a7b55b
enumを使った処理に変更 faqs_categoriesテーブルのデータを使った処理群とテーブルを削除
sochi419 May 7, 2024
e08d6e0
slimLint違反を修正
sochi419 May 7, 2024
4b4b09b
FAQのPCでの見た目を作成
machida May 1, 2024
ec58966
FAQにデザインを入れた
machida May 9, 2024
3b091a6
FAQに関する細かいデザイン調整
machida May 9, 2024
608a48c
radio input を隠した
machida May 9, 2024
ff3c38e
不要な記述を削除
sochi419 May 10, 2024
ac682c7
デザイン修正影響で通らなくなったテストを修正
sochi419 May 21, 2024
4b0858d
admin側のFAQのshowを削除
sochi419 May 21, 2024
855db3f
FAQページのカテゴリタブをeach文で簡略化
sochi419 May 22, 2024
c6c51c6
lintエラーを解消
sochi419 May 22, 2024
84b519b
モバイル表示されるselectタグの選択肢を日本語化、カテゴリを選択しても「全て」になったままだった不具合を修正
sochi419 May 23, 2024
8a509fb
セレクトタブでカテゴリ選択すると、即座にページが切り替わるよう修正
sochi419 May 29, 2024
fa010f8
enum削除、faq_categoryモデルを使った処理に変更
sochi419 Jul 20, 2024
ab1dc78
enum削除に合わせてtestを修正
sochi419 Jul 29, 2024
0264bbd
rubocop指摘点を修正
sochi419 Jul 29, 2024
f8821c8
モバイル表示の不具合修正、lintエラー修正
sochi419 Jul 29, 2024
84e72e7
データ取得時に並び順を指定する処理を追加
sochi419 Jul 31, 2024
670c85f
モデル、テーブル名の変更
sochi419 Sep 22, 2024
10a30b5
新デザインを適用し、とりあえず動くようにした
machida Oct 8, 2024
431f183
FAQデザイン更新
machida Oct 9, 2024
0e778c2
FAQカテゴリーの管理画面を追加
komagata Nov 4, 2024
9072ca4
不要になったテストの削除
komagata Nov 7, 2024
dd23a7e
FAQカテゴリーに関するテストを追加
komagata Nov 11, 2024
3717493
使っていないroutesを削除
komagata Nov 11, 2024
f61c0bd
FAQ関連の失敗しているテストを修正
komagata Nov 11, 2024
3481ba6
FAQにデザインを入れ、初期データのカテゴリを修正、管理画面のタブを整理した
machida Nov 14, 2024
de66a6e
UIの変更にテストを追従させた
komagata Nov 14, 2024
a4833bc
fixtureに不要な文字が混入していたのを修正
komagata Nov 15, 2024
4b55446
スマホ時のフォームの微調整
machida Nov 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions app/controllers/admin/faq_categories/faqs_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

class Admin::FAQCategories::FaqsController < AdminController
before_action :set_faq_category, only: %i[index update]

def index
@faqs = @faq_category.faqs
end

def update
faq = @faq_category.faqs.find(params[:id])
faq.insert_at(params[:faq][:insert_at].to_i)
head :ok
end

private

def set_faq_category
@faq_category = FAQCategory.find(params[:faq_category_id])
end
end
53 changes: 53 additions & 0 deletions app/controllers/admin/faq_categories_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# frozen_string_literal: true

class Admin::FAQCategoriesController < AdminController
before_action :set_faq_category, only: %i[edit update destroy]

def index
@faq_categories = FAQCategory.order(:created_at)
end

def new
@faq_category = FAQCategory.new
end

def create
@faq_category = FAQCategory.new(faq_category_params)

if @faq_category.save
redirect_to admin_faq_categories_path, notice: 'FAQカテゴリーを作成しました。'
else
render 'new'
end
end

def edit; end

def update
if params[:faq_category][:insert_at]
@faq_category.insert_at(params[:faq_category][:insert_at].to_i)
return head :ok
end

if @faq_category.update(faq_category_params)
redirect_to admin_faq_categories_path, notice: 'FAQカテゴリーを更新しました。'
else
render 'edit'
end
end

def destroy
@faq_category.destroy
redirect_to admin_faq_categories_path, notice: 'FAQカテゴリーを削除しました。'
end

private

def faq_category_params
params.require(:faq_category).permit(:name, :insert_at)
end

def set_faq_category
@faq_category = FAQCategory.find(params[:id])
end
end
52 changes: 52 additions & 0 deletions app/controllers/admin/faqs_controller.rb
Copy link
Contributor

@masyuko0222 masyuko0222 May 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

すみません、調べてみたらFAQのQがQuestionsですでに複数形だったみたいです。
https://ja.wikipedia.org/wiki/FAQ

じゃあモデルを単数形でどう表すのという話になっちゃうので、今回は統一感あればどちらでもよかったかもです😅(APIの方のコントローラ名と合ってればいいかな、と思います)
前回細かい指摘してしまってすみません🙇

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

私もFAQのQが複数形であることを知りませんでした😅
元々複数形だったんですね〜
勉強になりました!

今回はこのまま複数形の命名にしようと思います。

Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# frozen_string_literal: true

class Admin::FaqsController < AdminController
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FAQは略語なので複数形でもsが不要なようにInflectorを設定するのが良いかもです。

ActiveSupport::Inflectorでacronymを追加するときにはunderscoreメソッドへの影響にも注意が必要 #Ruby - Qiita

before_action :set_faq, only: %i[show edit update destroy]
before_action :set_faq_category, only: %i[index edit new update create]

def index; end

def new
@faq = FAQ.new
end

def create
@faq = FAQ.new(faq_params)

if @faq.save
redirect_to admin_faqs_path, notice: 'FAQを作成しました。'
else
render 'new'
end
end

def show; end
def edit; end

def update
if @faq.update(faq_params)
redirect_to admin_faqs_path, notice: 'FAQを更新しました。'
else
render 'edit'
end
end

def destroy
@faq.destroy
redirect_to admin_faqs_path, notice: 'FAQを削除しました。'
end

private

def faq_params
params.require(:faq).permit(:answer, :question, :faq_category_id)
end

def set_faq
@faq = FAQ.find(params[:id])
end

def set_faq_category
@faq_categories = FAQCategory.all
end
end
19 changes: 17 additions & 2 deletions app/controllers/welcome_controller.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# frozen_string_literal: true

require_dependency 'faq_category'
class WelcomeController < ApplicationController
skip_before_action :require_active_user_login, raise: false
layout 'lp'
DEFAULT_COURSE = 'Railsエンジニア'
FAQ_CATEGORY_NAME = '法人利用について'

def index
@mentors = current_user ? User.mentors_sorted_by_created_at : User.visible_sorted_mentors
Expand All @@ -15,9 +17,22 @@ def job_support; end

def pricing; end

def faq; end
def faq
@faq_categories = FAQCategory.order(:position).select do |faq_category|
faq_category.faqs.present?
end

if params[:category].present?
faq_category = FAQCategory.find_by(name: params[:category])
@faqs = faq_category.faqs
else
@faqs = FAQ.order(:position)
end
end

def training; end
def training
@faqs = FAQCategory.find_by(name: FAQ_CATEGORY_NAME).faqs
end

def practices; end

Expand Down
7 changes: 7 additions & 0 deletions app/helpers/faq_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

module FAQHelper
def format_question(question)
"#{question.delete('??')}?"
end
end
2 changes: 2 additions & 0 deletions app/javascript/packs/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ import '../invitation-url-updater.js'
import '../payment-methods-check-boxes.js'
import '../product-checker.js'
import '../user-follow.js'
import '../sort-faq.js'
import '../sort-faq-category.js'

import VueMounter from '../VueMounter.js'
import Questions from '../components/questions.vue'
Expand Down
24 changes: 24 additions & 0 deletions app/javascript/sort-faq-category.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import Sortable from 'sortablejs'
import Bootcamp from 'bootcamp'

document.addEventListener('DOMContentLoaded', () => {
const element = document.querySelector('#js-faq-category-sortable')
if (!element) return

Sortable.create(element, {
handle: '.js-grab',
onEnd(event) {
const id = event.item.id
const url = `/admin/faq_categories/${id}`
const params = {
faq_category: {
insert_at: event.newIndex + 1
}
}

Bootcamp.patch(url, params).catch((error) => {
console.error('Error while updating an order:', error)
})
}
})
})
25 changes: 25 additions & 0 deletions app/javascript/sort-faq.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import Sortable from 'sortablejs'
import Bootcamp from 'bootcamp'

document.addEventListener('DOMContentLoaded', () => {
const element = document.querySelector('#js-faq-sortable')
if (!element) return

Sortable.create(element, {
handle: '.js-grab',
onEnd(event) {
const id = event.item.id
const categoryId = event.item.dataset.faqCategoryId
const url = `/admin/faq_categories/${categoryId}/faqs/${id}`
const params = {
faq: {
insert_at: event.newIndex + 1
}
}

Bootcamp.patch(url, params).catch((error) => {
console.error('Error while updating an order:', error)
})
}
})
})
26 changes: 26 additions & 0 deletions app/javascript/stylesheets/_common-imports.sass
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,30 @@
@import "shared/blocks/card-list/card-list"
@import "shared/blocks/card-list/products"

@import shared/blocks/form/block-checks
@import shared/blocks/form/books-form-item
@import shared/blocks/form/books-form
@import shared/blocks/form/checkboxes
@import shared/blocks/form/form-actions
@import shared/blocks/form/form-added-choice
@import shared/blocks/form/form-item-actions
@import shared/blocks/form/form-item-block
@import shared/blocks/form/form-item-group
@import shared/blocks/form/form-item
@import shared/blocks/form/form-link-block
@import shared/blocks/form/form-notice
@import shared/blocks/form/form-selects
@import shared/blocks/form/form-tabs-item
@import shared/blocks/form/form-tabs
@import shared/blocks/form/form-times
@import shared/blocks/form/form
@import shared/blocks/form/hidden-form-item
@import shared/blocks/form/important-message
@import shared/blocks/form/linear-scale
@import shared/blocks/form/many-check-boxes
@import shared/blocks/form/markdown-form
@import shared/blocks/form/radios
@import shared/blocks/form/vue-tags-input
@import shared/blocks/form/form-textarea

@import "shared/helpers/state"
26 changes: 0 additions & 26 deletions app/javascript/stylesheets/application.sass
Original file line number Diff line number Diff line change
Expand Up @@ -29,32 +29,6 @@
@import application/blocks/footer/footer-nav
@import application/blocks/footer/footer

@import application/blocks/form/block-checks
@import application/blocks/form/books-form-item
@import application/blocks/form/books-form
@import application/blocks/form/checkboxes
@import application/blocks/form/form-actions
@import application/blocks/form/form-added-choice
@import application/blocks/form/form-item-actions
@import application/blocks/form/form-item-block
@import application/blocks/form/form-item-group
@import application/blocks/form/form-item
@import application/blocks/form/form-link-block
@import application/blocks/form/form-notice
@import application/blocks/form/form-selects
@import application/blocks/form/form-tabs-item
@import application/blocks/form/form-tabs
@import application/blocks/form/form-times
@import application/blocks/form/form
@import application/blocks/form/hidden-form-item
@import application/blocks/form/important-message
@import application/blocks/form/linear-scale
@import application/blocks/form/many-check-boxes
@import application/blocks/form/markdown-form
@import application/blocks/form/radios
@import application/blocks/form/vue-tags-input
@import application/blocks/form/form-textarea

@import application/blocks/header/header-current-user
@import application/blocks/header/header-dropdown
@import application/blocks/header/header-links
Expand Down
2 changes: 2 additions & 0 deletions app/javascript/stylesheets/atoms/_a-text-input.sass
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ textarea.a-text-input
line-height: 1.5
min-height: 10rem
overflow: hidden
&.is-xs
min-height: 6rem
&.is-sm
min-height: 10rem
&.is-md
Expand Down
7 changes: 3 additions & 4 deletions app/javascript/stylesheets/config/mixins/_grid.sass
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
.row
@for $i from 0 through 16
$gutter-size: $i * 4
+media-breakpoint-up(xl)
&.is-gutter-width-#{$gutter-size}
gap: #{math.div($gutter-size, 16)}rem
+make-grid-columns($grid-columns, #{math.div($gutter-size, 16)}rem)
&.is-gutter-width-#{$gutter-size}
gap: #{math.div($gutter-size, 16)}rem
+make-grid-columns($grid-columns, #{math.div($gutter-size, 16)}rem)
2 changes: 1 addition & 1 deletion app/javascript/stylesheets/config/variables/_colors.sass
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ $accent: hsl(44, 96%, 54%)
$base: white

// completion
$completion: hsl(197deg 83% 49%)
$completion: hsl(197, 83%, 49%)
$completion-dark: rgb(0 0 0 / 20%)

// background
Expand Down
8 changes: 3 additions & 5 deletions app/javascript/stylesheets/lp.sass
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
@import lp/blocks/lp/lp-header
@import lp/blocks/lp/lp-header-nav

@import lp/blocks/lp/welcome-top-info

// top
@import lp/blocks/lp/lp-top-cover

Expand Down Expand Up @@ -60,6 +62,7 @@
// lp-faqs
@import lp/blocks/lp/lp-faqs
@import lp/blocks/lp/lp-faq
@import lp/blocks/lp/side-filter

// lp-course-selection
@import lp/blocks/lp/lp-course-selection
Expand All @@ -79,11 +82,6 @@
@import lp/blocks/articles/article-author

/////////////////////
@import lp/welcome/welcome-top-info
@import lp/welcome/welcome-trial-period-table


@import lp/corporate-training/corporate-training-images
@import lp/corporate-training/corporate-training-overview
@import lp/corporate-training/corporate-training-example
@import lp/corporate-training/corporate-training-testimonial
1 change: 0 additions & 1 deletion app/javascript/stylesheets/lp/base/_base.sass
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ html.is-lp
body.is-lp
background-color: var(--background)


.not-logged-in-footer
color: var(--default-text)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,11 @@
+text-block(1.375rem 1.4, 800)
&.is-course-name
font-size: .875rem
&.is-sm
color: var(--main)
+media-breakpoint-up(lg)
+text-block(1.5rem 1.4, 800)
+media-breakpoint-only(md)
+text-block(1.25rem 1.4, 800)
+media-breakpoint-down(sm)
+text-block(1.125rem 1.4, 800)
9 changes: 9 additions & 0 deletions app/javascript/stylesheets/lp/blocks/lp/_lp-faq.sass
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,12 @@
font-size: 1rem
+media-breakpoint-down(sm)
font-size: .875rem

.lp-faq__edit
margin-top: .75rem

.lp-faq__edit-link
+text-block(.875rem 1.4)
color: var(--muted-text)
&:hover
color: var(--main)
2 changes: 1 addition & 1 deletion app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
flex-direction: column
gap: 2rem
max-width: 40rem
float: right
margin: 0
Loading