From a6e2b44bfd5178fc6e605ec414a04af4ebfccdb6 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 08:54:51 +0900 Subject: [PATCH 001/101] =?UTF-8?q?FAQ=E3=83=A2=E3=83=87=E3=83=AB=E3=82=92?= =?UTF-8?q?=E4=BD=9C=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/faq.rb | 6 ++++ config/initializers/inflections.rb | 1 + db/migrate/20230712223805_create_faqs.rb | 12 ++++++++ db/schema.rb | 10 +++++++ test/fixtures/faqs.yml | 7 +++++ test/models/faq_test.rb | 36 ++++++++++++++++++++++++ 6 files changed, 72 insertions(+) create mode 100644 app/models/faq.rb create mode 100644 db/migrate/20230712223805_create_faqs.rb create mode 100644 test/fixtures/faqs.yml create mode 100644 test/models/faq_test.rb diff --git a/app/models/faq.rb b/app/models/faq.rb new file mode 100644 index 00000000000..6b38d720265 --- /dev/null +++ b/app/models/faq.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class FAQ < ApplicationRecord + validates :answer, presence: true, uniqueness: { scope: :question } + validates :question, presence: true, uniqueness: true +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 1ba32c1ed76..080ca0b4252 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -15,4 +15,5 @@ inflect.acronym "API" inflect.acronym "AI" inflect.irregular "buzz", "buzzes" + inflect.acronym "FAQ" end diff --git a/db/migrate/20230712223805_create_faqs.rb b/db/migrate/20230712223805_create_faqs.rb new file mode 100644 index 00000000000..7f29a844aea --- /dev/null +++ b/db/migrate/20230712223805_create_faqs.rb @@ -0,0 +1,12 @@ +class CreateFaqs < ActiveRecord::Migration[6.1] + def change + create_table :faqs do |t| + t.string :answer, null: false, unique: true + t.string :question, null: false, unique: true + + t.timestamps + end + add_index :faqs, :question, unique: true + add_index :faqs, [:answer, :question], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 0c91e92aa40..62edd8e25f0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -267,6 +267,15 @@ t.index ["user_id"], name: "index_external_entries_on_user_id" end + create_table "faqs", force: :cascade do |t| + t.string "answer", null: false + t.string "question", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true + t.index ["question"], name: "index_faqs_on_question", unique: true + end + create_table "followings", force: :cascade do |t| t.integer "follower_id" t.integer "followed_id" @@ -759,6 +768,7 @@ t.text "profile_text" t.string "feed_url" t.boolean "sent_student_followup_message", default: false + t.string "times_id", comment: "Snowflake ID" t.string "country_code" t.string "subdivision_code" t.boolean "auto_retire", default: true diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml new file mode 100644 index 00000000000..86b5d97f3c4 --- /dev/null +++ b/test/fixtures/faqs.yml @@ -0,0 +1,7 @@ +faq1: + question: 質問1 + answer: 解答1 + +faq2: + question: 質問2 + answer: 解答2 diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb new file mode 100644 index 00000000000..752a7794061 --- /dev/null +++ b/test/models/faq_test.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'test_helper' + +class FAQTest < ActiveSupport::TestCase + setup do + @faq1 = faqs(:faq1) + end + + test 'faq1 is valid' do + assert @faq1.valid? + end + + test 'faq1 is invalid if question is null' do + @faq1.question = nil + assert @faq1.invalid? + end + + test 'faq1 is invalid if answer is null' do + @faq1.answer = nil + assert @faq1.invalid? + end + + test 'new faq is invalid if question has already existed' do + new_faq = faqs(:faq2) + new_faq.question = @faq1.question + assert new_faq.invalid? + end + + test 'new faq is invalid if answer and question has already existed' do + new_faq = faqs(:faq2) + new_faq.answer = @faq1.answer + new_faq.question = @faq1.question + assert new_faq.invalid? + end +end From 9bd837d5a2c455c2f384fb25c8e0b055f1454d98 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 12:13:56 +0900 Subject: [PATCH 002/101] =?UTF-8?q?FAQ=E3=83=A2=E3=83=87=E3=83=AB=E7=94=A8?= =?UTF-8?q?=E3=81=AElocales=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/ja.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 28a465d09de..66dac81678e 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -47,6 +47,7 @@ ja: book: 参考書籍 regular_event: 定期イベント request_retirement: 退会申請 + faq: FAQ attributes: user: login_name: アカウント @@ -303,6 +304,9 @@ ja: request_retirement/keep_data/option: keep: 残す delete: 削除する + faq: + question: 質問 + answer: 回答 enums: user: job: From ac816cace0ab69aac5af6791776b22792f0efc29 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 18:03:59 +0900 Subject: [PATCH 003/101] =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=80=85=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=ABFAQ=E3=81=AE=E4=B8=80=E8=A6=A7?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=80=81=E6=96=B0=E8=A6=8F=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 27 ++++++++++++++++++++++ app/views/admin/_admin_page_tabs.html.slim | 4 ++++ app/views/admin/faq/_form.html.slim | 14 +++++++++++ app/views/admin/faq/_table.html.slim | 17 ++++++++++++++ app/views/admin/faq/index.html.slim | 19 +++++++++++++++ app/views/admin/faq/new.html.slim | 24 +++++++++++++++++++ config/routes/admin.rb | 1 + 7 files changed, 106 insertions(+) create mode 100644 app/controllers/admin/faq_controller.rb create mode 100644 app/views/admin/faq/_form.html.slim create mode 100644 app/views/admin/faq/_table.html.slim create mode 100644 app/views/admin/faq/index.html.slim create mode 100644 app/views/admin/faq/new.html.slim diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb new file mode 100644 index 00000000000..a8e291acc70 --- /dev/null +++ b/app/controllers/admin/faq_controller.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class Admin::FAQController < AdminController + def index + @faqs = FAQ.all + 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 + + private + + def faq_params + params.require(:faq).permit(:answer, :question) + end +end diff --git a/app/views/admin/_admin_page_tabs.html.slim b/app/views/admin/_admin_page_tabs.html.slim index 89d84d3b08a..714e767760b 100644 --- a/app/views/admin/_admin_page_tabs.html.slim +++ b/app/views/admin/_admin_page_tabs.html.slim @@ -25,3 +25,7 @@ = link_to '招待URL', admin_invitation_url_index_path, class: "page-tabs__item-link #{current_link(/^admin-invitation_url/)}" + li.page-tabs__item + = link_to 'FAQ', + admin_faqs_path, + class: "page-tabs__item-link #{current_link(/^admin-faqs/)}" diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim new file mode 100644 index 00000000000..b2e0a1289eb --- /dev/null +++ b/app/views/admin/faq/_form.html.slim @@ -0,0 +1,14 @@ += form_with model: [:admin, faq], local: true, html: { name: 'faq' } do |f| + .form__items + .form-item + = f.label :question, class: 'a-form-label' + = f.text_area :question, size: '10x20', class: 'a-text-input' + .form-item + = f.label :answer, class: 'a-form-label' + = f.text_area :answer, size: '10x20', class: 'a-text-input' + .form-actions + ul.form-actions__items + li.form-actions__item.is-main + = f.submit nil, class: 'a-button is-lg is-block is-primary' + li.form-actions__item.is-sub + = link_to 'キャンセル', :back, class: 'a-button is-sm is-text' diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim new file mode 100644 index 00000000000..05bfc9c3a86 --- /dev/null +++ b/app/views/admin/faq/_table.html.slim @@ -0,0 +1,17 @@ +.admin-table + table.admin-table__table + thead.admin-table__header + tr.admin-table__labels + th.admin-table__label 質問 + th.admin-table__label 回答 + th.admin-table__label 編集 + tbody.admin-table__items + - faqs.each do |faq| + tr.admin-table__item(id="faq_#{faq.id}") + td.admin-table__item-value + = faq.question + td.admin-table__item-value + = faq.answer + td.admin-table__item-value.is-text-align-center + = link_to new_admin_faq_path, class: 'a-button is-sm is-secondary is-icon' do + i.fa-solid.fa-pen diff --git a/app/views/admin/faq/index.html.slim b/app/views/admin/faq/index.html.slim new file mode 100644 index 00000000000..8060748a13a --- /dev/null +++ b/app/views/admin/faq/index.html.slim @@ -0,0 +1,19 @@ += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQ一覧 + .page-main-header__end + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQ追加 + .page-body + .container.is-lg + = render 'table', faqs: @faqs diff --git a/app/views/admin/faq/new.html.slim b/app/views/admin/faq/new.html.slim new file mode 100644 index 00000000000..56c40442652 --- /dev/null +++ b/app/views/admin/faq/new.html.slim @@ -0,0 +1,24 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQ追加 + .page-main-header__end + .page-main-header-actions + ul.page-main-header-actions__items + li.page-main-header-actions__item + = link_to 'FAQ一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' +.page-body + .container.is-md + = render 'form', faq: @faq diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 84738149d17..53c776f06fb 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -11,5 +11,6 @@ resources :campaigns, only: %i(new create index edit update) resources :inquiries, only: %i(index show) resources :invitation_url, only: %i(index) + resources :faqs, only: %i(index new create), controller: 'faq' end end From c1c5ab74c5c608df993c70225e9b59659eb38396 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 18:25:52 +0900 Subject: [PATCH 004/101] =?UTF-8?q?FAQ=E3=81=AE=E7=B7=A8=E9=9B=86=E3=80=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 15 +++++++++++++++ app/views/admin/faq/_table.html.slim | 2 +- app/views/admin/faq/edit.html.slim | 18 ++++++++++++++++++ config/routes/admin.rb | 2 +- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 app/views/admin/faq/edit.html.slim diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index a8e291acc70..4208177d02c 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class Admin::FAQController < AdminController + before_action :set_faq, only: %i[edit update] def index @faqs = FAQ.all end @@ -19,9 +20,23 @@ def create end end + def edit; end + + def update + if @faq.update(faq_params) + redirect_to admin_faqs_path, notice: 'FAQを更新しました。' + else + render 'edit' + end + end + private def faq_params params.require(:faq).permit(:answer, :question) end + + def set_faq + @faq = FAQ.find(params[:id]) + end end diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 05bfc9c3a86..e36b99ad982 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -13,5 +13,5 @@ td.admin-table__item-value = faq.answer td.admin-table__item-value.is-text-align-center - = link_to new_admin_faq_path, class: 'a-button is-sm is-secondary is-icon' do + = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen diff --git a/app/views/admin/faq/edit.html.slim b/app/views/admin/faq/edit.html.slim new file mode 100644 index 00000000000..6e9e6822580 --- /dev/null +++ b/app/views/admin/faq/edit.html.slim @@ -0,0 +1,18 @@ +- title 'FAQ編集' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQ追加 + += render 'admin/admin_page_tabs' + +.page-body + .container.is-md + = render 'form', faq: @faq diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 53c776f06fb..4a9f0572282 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -11,6 +11,6 @@ resources :campaigns, only: %i(new create index edit update) resources :inquiries, only: %i(index show) resources :invitation_url, only: %i(index) - resources :faqs, only: %i(index new create), controller: 'faq' + resources :faqs, controller: 'faq' end end From 634ef8f858afd166fa87654232e101230942e0b8 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 18:40:39 +0900 Subject: [PATCH 005/101] =?UTF-8?q?FAQ=E3=81=AE=E5=89=8A=E9=99=A4=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 7 ++++++- app/views/admin/faq/_form.html.slim | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index 4208177d02c..a60bcd275d8 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Admin::FAQController < AdminController - before_action :set_faq, only: %i[edit update] + before_action :set_faq, only: %i[edit update destroy] def index @faqs = FAQ.all end @@ -30,6 +30,11 @@ def update end end + def destroy + @faq.destroy + redirect_to admin_faqs_path, notice: 'FAQを削除しました。' + end + private def faq_params diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index b2e0a1289eb..9908fa97fab 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -12,3 +12,6 @@ = f.submit nil, class: 'a-button is-lg is-block is-primary' li.form-actions__item.is-sub = link_to 'キャンセル', :back, class: 'a-button is-sm is-text' + - if faq.id.present? + li.form-actions__item.is-muted + = link_to '削除', admin_faq_path(faq), data: { confirm: '本当によろしいですか?この操作はデータを削除するため元に戻すことができません。' }, method: :delete, class: 'a-button is-sm is-muted-text' From 0041891300cdd1851ee3ba5fdc2d27aeb9097bf8 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 06:28:45 +0900 Subject: [PATCH 006/101] =?UTF-8?q?faq=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?seed=E3=83=87=E3=83=BC=E3=82=BF=E3=82=92=E7=94=A8=E6=84=8F?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/fixtures/faqs.yml | 83 ++++++++++++++++++++++++++++++++++++++++++++ db/seeds.rb | 1 + 2 files changed, 84 insertions(+) create mode 100644 db/fixtures/faqs.yml diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml new file mode 100644 index 00000000000..e07518655f3 --- /dev/null +++ b/db/fixtures/faqs.yml @@ -0,0 +1,83 @@ +faq1: + question: 学習を終えるのにどれくらいの時間がかかりますか + answer: かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。 + +faq2: + question: 途中で辞めることは可能ですか + answer: いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。 + +faq3: + question: 学習はオンラインだけですか + answer: オンラインだけです。オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。 + +faq4: + question: 休会をすることは可能ですか + answer: 最大3ヶ月まで休会をすることが可能です。 + +faq5: + question: わからないことがあった場合、質問はできますか + answer: できます。フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。 + +faq6: + question: 退会した月は料金が日割りで請求されますか + answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 + +faq7: + question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか + answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 + +faq8: + question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか + answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 + +faq9: + question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか + answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 + +faq10: + question: 現在、大学に在学中なのですが、参加できますか + answer: 学生でも参加可能です。年齢に制限はありません。 + +faq11: + question: Linuxで学習をしたいのですが可能ですか + answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 + +faq12: + question: Windowsで学習をしたいのですが可能ですか + answer: Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。WSL2が使えるマシンとは?WSL2でLinuxを使おう + +faq13: + question: 古い OS のままで学習をしたいのですが可能ですか + answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 + +faq14: + question: 転職エージェントを使って就職活動をすることは可能ですか + answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 + +faq15: + question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか + answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 + +faq16: + question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか + answer: "全く問題ありません。フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。たくさんの女性が卒業しプログラマーとして就職し活躍しています。" + +faq17: + question: 30代なのですが、エンジニアとして就職することは可能ですか + answer: 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。 + +faq18: + question: 会社の新人研修など法人での利用はできますか + answer: 可能です。法人でのご利用についてはこちらに詳細を記載しております。 + +faq19: + question: 何をしたら卒業になりますか + answer: 全てのプラクティスを修了したら卒業になります。最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。 + +faq20: + question: 利用料の領収書は発行してもらえますか + answer: 発行します。Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。 + +faq21: + question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか + answer: 可能です。フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。 diff --git a/db/seeds.rb b/db/seeds.rb index acc291f14b4..93f339af5f4 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -25,6 +25,7 @@ discord_profiles events external_entries + faqs followings reports learning_times From 372726f06593ea0281aad954b3d271f8b71e66a9 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 08:38:18 +0900 Subject: [PATCH 007/101] =?UTF-8?q?FAQ=E4=B8=80=E8=A6=A7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=A7FAQ=E3=81=AE=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 4 +- app/helpers/faq_helper.rb | 7 +++ app/views/admin/faq/_table.html.slim | 6 +- db/fixtures/faqs.yml | 88 +++++++++++++++++++++++---- 4 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 app/helpers/faq_helper.rb diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index a74746a3361..54c5197b8ab 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -15,7 +15,9 @@ def job_support; end def pricing; end - def faq; end + def faq + @faqs = FAQ.all + end def training; end diff --git a/app/helpers/faq_helper.rb b/app/helpers/faq_helper.rb new file mode 100644 index 00000000000..999fbc0366b --- /dev/null +++ b/app/helpers/faq_helper.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module FAQHelper + def question_mark_with(question) + "#{question}?" + end +end diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index e36b99ad982..a6d427aa75c 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -8,9 +8,9 @@ tbody.admin-table__items - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") - td.admin-table__item-value - = faq.question - td.admin-table__item-value + td.admin-table__item-value.is-text-align-center + = question_mark_with(faq.question) + td.admin-table__item-value.is-text-align-center = faq.answer td.admin-table__item-value.is-text-align-center = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index e07518655f3..49ef8d38eda 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -1,83 +1,149 @@ faq1: + id: 1 question: 学習を終えるのにどれくらいの時間がかかりますか - answer: かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。 + answer: "\ + かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n\ + 覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n\ + 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\n\ + フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ + とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ + " faq2: + id: 2 question: 途中で辞めることは可能ですか - answer: いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。 + answer: "\ + いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ + フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ + プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ + " faq3: + id: 3 question: 学習はオンラインだけですか - answer: オンラインだけです。オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。 + answer: "\ + オンラインだけです。\n\n\ + オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ + " faq4: + id: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 faq5: + id: 5 question: わからないことがあった場合、質問はできますか - answer: できます。フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。 + answer: "\ + できます。\n\n\ + フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n\ + 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ + 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ + " faq6: + id: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 faq7: + id: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 faq8: + id: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 faq9: + id: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 faq10: + id: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 faq11: + id: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 faq12: + id: 12 question: Windowsで学習をしたいのですが可能ですか - answer: Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。WSL2が使えるマシンとは?WSL2でLinuxを使おう + answer: "\ + Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ + WSL2が使えるマシンとは?\n\n\ + WSL2でLinuxを使おう\ + " faq13: + id: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 faq14: + id: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 faq15: + id: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 faq16: + id: 16 question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか - answer: "全く問題ありません。フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。たくさんの女性が卒業しプログラマーとして就職し活躍しています。" + answer: "\ + 全く問題ありません。\n\n\ + フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ + たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ + " faq17: + id: 17 question: 30代なのですが、エンジニアとして就職することは可能ですか - answer: 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。 + answer: "\ + 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n\ + 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n\ + 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n\ + 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ + また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ + " faq18: + id: 18 question: 会社の新人研修など法人での利用はできますか - answer: 可能です。法人でのご利用についてはこちらに詳細を記載しております。 + answer: "\ + 可能です。\n\n\ + 法人でのご利用についてはこちらに詳細を記載しております。\ + " faq19: + id: 19 question: 何をしたら卒業になりますか - answer: 全てのプラクティスを修了したら卒業になります。最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。 + answer: "\ + 全てのプラクティスを修了したら卒業になります。\n\n\ + 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ + " faq20: + id: 20 question: 利用料の領収書は発行してもらえますか - answer: 発行します。Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。 + answer: "\ + 発行します。\n\n\ + Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ + " faq21: + id: 21 question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか - answer: 可能です。フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。 + answer: "\ + 可能です。\n\n\ + フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ + オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ + " From b5b7c50690b1e90b3488d191f614aaab55c9575d Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 13:42:58 +0900 Subject: [PATCH 008/101] =?UTF-8?q?FAQ=E3=82=92=E4=BD=9C=E6=88=90=E3=81=97?= =?UTF-8?q?=E3=81=9F=E9=A0=86=E3=81=A7=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- app/controllers/welcome_controller.rb | 2 +- app/models/faq.rb | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index a60bcd275d8..1d96becced3 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -3,7 +3,7 @@ class Admin::FAQController < AdminController before_action :set_faq, only: %i[edit update destroy] def index - @faqs = FAQ.all + @faqs = FAQ.default_order end def new diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 54c5197b8ab..b44f85a01b8 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,7 +16,7 @@ def job_support; end def pricing; end def faq - @faqs = FAQ.all + @faqs = FAQ.default_order end def training; end diff --git a/app/models/faq.rb b/app/models/faq.rb index 6b38d720265..83a26d1871e 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -3,4 +3,6 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true + + scope :default_order, -> { order(id: :asc) } end From 4555b22f7ec09a00c1cda7961ca6c17ce5c8bf0f Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 13:43:29 +0900 Subject: [PATCH 009/101] =?UTF-8?q?FAQ=E3=81=AE=E4=BD=9C=E6=88=90=E3=82=92?= =?UTF-8?q?Markdown=E3=81=A7=E8=A1=8C=E3=81=88=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 14 +++++++++++--- db/fixtures/faqs.yml | 6 +++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 9908fa97fab..a2c30a24f6a 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -2,10 +2,18 @@ .form__items .form-item = f.label :question, class: 'a-form-label' - = f.text_area :question, size: '10x20', class: 'a-text-input' + = f.text_area :question, class: 'a-text-input' .form-item - = f.label :answer, class: 'a-form-label' - = f.text_area :answer, size: '10x20', class: 'a-text-input' + .row.js-markdown-parent + .col-md-6.col-xs-12 + = f.label :answer, class: 'a-form-label' + = f.text_area :answer, + class: 'a-text-input js-warning-form js-markdown markdown-form__text-area', + data: { 'preview': '.js-preview' } + .col-md-6.col-xs-12 + .a-form-label + | プレビュー + .js-preview.a-long-text.is-md.markdown-form__preview .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 49ef8d38eda..441f04f6471 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -76,8 +76,8 @@ faq12: question: Windowsで学習をしたいのですが可能ですか answer: "\ Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ - WSL2が使えるマシンとは?\n\n\ - WSL2でLinuxを使おう\ + [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ + [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " faq13: @@ -120,7 +120,7 @@ faq18: question: 会社の新人研修など法人での利用はできますか answer: "\ 可能です。\n\n\ - 法人でのご利用についてはこちらに詳細を記載しております。\ + 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " faq19: From 04a975713fc3219780f3290e59ca23ef9de1fb81 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 14:15:48 +0900 Subject: [PATCH 010/101] =?UTF-8?q?FAQ=E4=B8=80=E8=A6=A7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AE=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E6=9B=B8=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/fixtures/faqs.yml | 150 ++++++++++++++++++++++++++++++++++++++-- test/system/faq_test.rb | 10 +++ 2 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 test/system/faq_test.rb diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 86b5d97f3c4..441f04f6471 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -1,7 +1,149 @@ faq1: - question: 質問1 - answer: 解答1 + id: 1 + question: 学習を終えるのにどれくらいの時間がかかりますか + answer: "\ + かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n\ + 覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n\ + 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\n\ + フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ + とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ + " faq2: - question: 質問2 - answer: 解答2 + id: 2 + question: 途中で辞めることは可能ですか + answer: "\ + いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ + フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ + プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ + " + +faq3: + id: 3 + question: 学習はオンラインだけですか + answer: "\ + オンラインだけです。\n\n\ + オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ + " + +faq4: + id: 4 + question: 休会をすることは可能ですか + answer: 最大3ヶ月まで休会をすることが可能です。 + +faq5: + id: 5 + question: わからないことがあった場合、質問はできますか + answer: "\ + できます。\n\n\ + フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n\ + 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ + 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ + " + +faq6: + id: 6 + question: 退会した月は料金が日割りで請求されますか + answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 + +faq7: + id: 7 + question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか + answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 + +faq8: + id: 8 + question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか + answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 + +faq9: + id: 9 + question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか + answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 + +faq10: + id: 10 + question: 現在、大学に在学中なのですが、参加できますか + answer: 学生でも参加可能です。年齢に制限はありません。 + +faq11: + id: 11 + question: Linuxで学習をしたいのですが可能ですか + answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 + +faq12: + id: 12 + question: Windowsで学習をしたいのですが可能ですか + answer: "\ + Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ + [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ + [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ + " + +faq13: + id: 13 + question: 古い OS のままで学習をしたいのですが可能ですか + answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 + +faq14: + id: 14 + question: 転職エージェントを使って就職活動をすることは可能ですか + answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 + +faq15: + id: 15 + question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか + answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 + +faq16: + id: 16 + question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか + answer: "\ + 全く問題ありません。\n\n\ + フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ + たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ + " + +faq17: + id: 17 + question: 30代なのですが、エンジニアとして就職することは可能ですか + answer: "\ + 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n\ + 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n\ + 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n\ + 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ + また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ + " + +faq18: + id: 18 + question: 会社の新人研修など法人での利用はできますか + answer: "\ + 可能です。\n\n\ + 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ + " + +faq19: + id: 19 + question: 何をしたら卒業になりますか + answer: "\ + 全てのプラクティスを修了したら卒業になります。\n\n\ + 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ + " + +faq20: + id: 20 + question: 利用料の領収書は発行してもらえますか + answer: "\ + 発行します。\n\n\ + Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ + " + +faq21: + id: 21 + question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか + answer: "\ + 可能です。\n\n\ + フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ + オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ + " diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb new file mode 100644 index 00000000000..c94e318f708 --- /dev/null +++ b/test/system/faq_test.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require 'application_system_test_case' + +class FAQTest < ApplicationSystemTestCase + test 'show listing FAQs' do + visit faq_path + FAQ.all.each { |faq| assert_text "#{faq.question}?" } + end +end From 2e417012fef65a926ec4c272f86e0fc84e1b9998 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 14:21:33 +0900 Subject: [PATCH 011/101] =?UTF-8?q?FAQHelper=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E6=9B=B8=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/helpers/faq_helper.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/helpers/faq_helper.rb diff --git a/test/helpers/faq_helper.rb b/test/helpers/faq_helper.rb new file mode 100644 index 00000000000..00e52cb60ed --- /dev/null +++ b/test/helpers/faq_helper.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require 'test_helper' + +class FAQHelperTest < ActionView::TestCase + test '#question_mark_with' do + faq = faqs(:faq1) + assert_equal question_mark_with(faq.question), "#{faq.question}?" + end +end From 76e2b6bb6eddfdd726c83d98869d3bb89950ca50 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 14:44:45 +0900 Subject: [PATCH 012/101] =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AEFAQ=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E6=9B=B8=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/admin/faq_test.rb | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/system/admin/faq_test.rb diff --git a/test/system/admin/faq_test.rb b/test/system/admin/faq_test.rb new file mode 100644 index 00000000000..11f3d6b03f2 --- /dev/null +++ b/test/system/admin/faq_test.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require 'application_system_test_case' + +class Admin::FAQTest < ApplicationSystemTestCase + test 'display listing FAQs' do + visit_with_auth '/admin/faqs', 'komagata' + assert_text 'FAQ一覧' + end + + test 'create FAQ' do + visit_with_auth '/admin/faqs/new', 'komagata' + within 'form[name=faq]' do + fill_in 'faq[question]', with: 'test FAQ' + fill_in 'faq[answer]', with: 'test FAQ' + click_button '登録する' + end + assert_text 'FAQを作成しました。' + end + + test 'update FAQ' do + visit_with_auth "/admin/faqs/#{faqs(:faq1).id}/edit", 'komagata' + within 'form[name=faq]' do + fill_in 'faq[question]', with: 'updated FAQ' + fill_in 'faq[answer]', with: 'updated FAQ' + click_button '更新する' + end + assert_text 'FAQを更新しました。' + end + + test "display answer's preview" do + visit_with_auth '/admin/faqs/new', 'komagata' + within 'form[name=faq]' do + fill_in 'faq[answer]', with: 'updated FAQ' + end + assert_selector '.markdown-form__preview', text: 'updated FAQ' + end + + test 'display link tag when answer has links' do + visit_with_auth '/admin/faqs/new', 'komagata' + within 'form[name=faq]' do + fill_in 'faq[answer]', with: '[test](https://example.com)' + end + assert_selector '.markdown-form__preview a', text: 'test' + end + + test 'delete company' do + visit_with_auth "/admin/faqs/#{faqs(:faq1).id}/edit", 'komagata' + click_on '削除' + page.driver.browser.switch_to.alert.accept + assert_text 'FAQを削除しました。' + end +end From 1a7d0340631ab33ab12c3e4f83ca31e05edc9ef0 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 16:16:14 +0900 Subject: [PATCH 013/101] =?UTF-8?q?FAQ=E3=81=AE=E8=BF=BD=E5=8A=A0=E3=81=AB?= =?UTF-8?q?=E4=BC=B4=E3=81=86=E6=97=A2=E5=AD=98=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/admin/home_test.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/system/admin/home_test.rb b/test/system/admin/home_test.rb index c1700ef4aeb..78bcd85784b 100644 --- a/test/system/admin/home_test.rb +++ b/test/system/admin/home_test.rb @@ -14,6 +14,7 @@ class Admin::HomeTest < ApplicationSystemTestCase assert_selector '.page-tabs__item-link', text: 'お試し延長' assert_selector '.page-tabs__item-link', text: 'お問い合わせ' assert_selector '.page-tabs__item-link', text: '招待URL' + assert_selector '.page-tabs__item-link', text: 'FAQ' assert_no_selector '.page-tabs__item-link', text: 'プラクティス' assert_no_selector '.page-tabs__item-link', text: 'カテゴリー' assert_no_selector '.page-tabs__item-link', text: 'コース' From 34bfb14a1554458e7975fc26a5f620743cd4d06f Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 16:23:38 +0900 Subject: [PATCH 014/101] =?UTF-8?q?FAQ=E4=B8=80=E8=A6=A7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AE=E3=82=B7=E3=82=B9=E3=83=86=E3=83=A0=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/faq_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index c94e318f708..c232170cdb3 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -5,6 +5,6 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs' do visit faq_path - FAQ.all.each { |faq| assert_text "#{faq.question}?" } + assert_selector '.faqs-item', count: FAQ.all.size end end From 0fd35843ad4254202df0d730f643322589c48602 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sat, 15 Jul 2023 08:02:12 +0900 Subject: [PATCH 015/101] =?UTF-8?q?circleCI=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E9=80=9A=E3=81=99=E3=81=9F=E3=82=81=E3=81=AB?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E5=90=8D=E3=82=92=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/models/faq_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index 752a7794061..965d2e6e81f 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -class FAQTest < ActiveSupport::TestCase +class FaqTest < ActiveSupport::TestCase setup do @faq1 = faqs(:faq1) end From f3dd78e9728c7deda7b9ce02699d2abb8e3fb983 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sat, 15 Jul 2023 08:15:30 +0900 Subject: [PATCH 016/101] =?UTF-8?q?FAQ=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=82=92?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E6=99=82=E9=96=93=E3=81=8C=E5=8F=A4=E3=81=84?= =?UTF-8?q?=E9=A0=86=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/faq.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/faq.rb b/app/models/faq.rb index 83a26d1871e..877ec7f3075 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -4,5 +4,5 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true - scope :default_order, -> { order(id: :asc) } + scope :default_order, -> { order(created_at: :asc) } end From 04015a760af52f2ffd0b2c4fd2bbe802afed19f9 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 10:45:32 +0900 Subject: [PATCH 017/101] =?UTF-8?q?FAQHelper=E3=81=AE=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=A6=E5=B8=B8=E6=99=82?= =?UTF-8?q?=EF=BC=9F=E3=83=9E=E3=83=BC=E3=82=AF=E3=81=8C1=E3=81=A4?= =?UTF-8?q?=E3=81=A0=E3=81=91=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/faq_helper.rb | 4 ++-- app/views/admin/faq/_table.html.slim | 2 +- test/helpers/faq_helper.rb | 10 ++++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/helpers/faq_helper.rb b/app/helpers/faq_helper.rb index 999fbc0366b..076a11362b8 100644 --- a/app/helpers/faq_helper.rb +++ b/app/helpers/faq_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module FAQHelper - def question_mark_with(question) - "#{question}?" + def format_question(question) + "#{question.delete('??')}?" end end diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index a6d427aa75c..d7d9404c01b 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -9,7 +9,7 @@ - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") td.admin-table__item-value.is-text-align-center - = question_mark_with(faq.question) + = format_question(faq.question) td.admin-table__item-value.is-text-align-center = faq.answer td.admin-table__item-value.is-text-align-center diff --git a/test/helpers/faq_helper.rb b/test/helpers/faq_helper.rb index 00e52cb60ed..0dda03245c4 100644 --- a/test/helpers/faq_helper.rb +++ b/test/helpers/faq_helper.rb @@ -3,8 +3,14 @@ require 'test_helper' class FAQHelperTest < ActionView::TestCase - test '#question_mark_with' do + test '#format_question' do faq = faqs(:faq1) - assert_equal question_mark_with(faq.question), "#{faq.question}?" + assert_equal format_question(faq.question), "#{faq.question}?" + end + + test '#format_question returns a ? mark' do + faq = faqs(:faq1) + faq.question += '?' + assert_equal format_question(faq.question).count('?'), 1 end end From 15a568bc3691f60fb9d4d0cfbd01d55aad991661 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 16:08:15 +0900 Subject: [PATCH 018/101] =?UTF-8?q?=E6=9C=AC=E7=95=AA=E7=92=B0=E5=A2=83?= =?UTF-8?q?=E3=81=ABFAQ=E3=81=AE=E3=83=87=E3=83=BC=E3=82=BF=E3=82=92?= =?UTF-8?q?=E6=8A=95=E5=85=A5=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AE?= =?UTF-8?q?=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92=E7=94=A8=E6=84=8F=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/data/20230716015559_add_multi_faq.rb | 98 +++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 db/data/20230716015559_add_multi_faq.rb diff --git a/db/data/20230716015559_add_multi_faq.rb b/db/data/20230716015559_add_multi_faq.rb new file mode 100644 index 00000000000..8c4442ed9d2 --- /dev/null +++ b/db/data/20230716015559_add_multi_faq.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +class AddMultiFAQ < ActiveRecord::Migration[6.1] + MULTI_FAQ = [ + { + question: '学習を終えるのにどれくらいの時間がかかりますか', + answer: "かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\nフィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\nとはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。" # rubocop:disable Layout/LineLength + }, + { + question: '途中で辞めることは可能ですか', + answer: "いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\nフィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\nプログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。" # rubocop:disable Layout/LineLength + }, + { + question: '学習はオンラインだけですか', + answer: "オンラインだけです。\n\nオンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。" + }, + { + question: '休会をすることは可能ですか', + answer: '最大3ヶ月まで休会をすることが可能です。' + }, + { + question: 'わからないことがあった場合、質問はできますか', + answer: "できます。\n\nフィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。" # rubocop:disable Layout/LineLength + }, + { + question: '退会した月は料金が日割りで請求されますか', + answer: '退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。' + }, + { + question: '仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか', + answer: '学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。' + }, + { + question: '就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか', + answer: 'はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。' + }, + { + question: '転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか', + answer: '可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。' + }, + { + question: '現在、大学に在学中なのですが、参加できますか', + answer: '学生でも参加可能です。年齢に制限はありません。' + }, + { + question: 'Linuxで学習をしたいのですが可能ですか', + answer: 'Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。' # rubocop:disable Layout/LineLength + }, + { + question: 'Windowsで学習をしたいのですが可能ですか', + answer: "Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n[WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n[WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)" # rubocop:disable Layout/LineLength + }, + { + question: '古い OS のままで学習をしたいのですが可能ですか', + answer: 'カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。' # rubocop:disable Layout/LineLength + }, + { + question: '転職エージェントを使って就職活動をすることは可能ですか', + answer: 'はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。' + }, + { + question: '卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか', + answer: '個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。' # rubocop:disable Layout/LineLength + }, + { + question: 'プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか', + answer: "全く問題ありません。\n\nフィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\nたくさんの女性が卒業しプログラマーとして就職し活躍しています。" # rubocop:disable Layout/LineLength + }, + { + question: '30代なのですが、エンジニアとして就職することは可能ですか', + answer: "今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\nまた、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。" # rubocop:disable Layout/LineLength + }, + { + question: '会社の新人研修など法人での利用はできますか', + answer: "可能です。\n\n法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。" + }, + { + question: '何をしたら卒業になりますか', + answer: "全てのプラクティスを修了したら卒業になります。\n\n最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。" + }, + { + question: '利用料の領収書は発行してもらえますか', + answer: "発行します。\n\nStripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。" + }, + { + question: 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか', + answer: "可能です。\n\nフィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\nオンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。" # rubocop:disable Layout/LineLength + } + ].freeze + + def up + MULTI_FAQ.each { |faq| FAQ.create(question: faq[:question], answer: faq[:answer]) } + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end From d9e9f624b2aa1b02227346326812ffe6c2f72024 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 16:46:50 +0900 Subject: [PATCH 019/101] =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E4=B8=8A?= =?UTF-8?q?=E9=83=A8=E3=81=AE=E8=A1=A8=E7=A4=BA=E6=BC=8F=E3=82=8C=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/index.html.slim | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/views/admin/faq/index.html.slim b/app/views/admin/faq/index.html.slim index 8060748a13a..8694d951636 100644 --- a/app/views/admin/faq/index.html.slim +++ b/app/views/admin/faq/index.html.slim @@ -1,3 +1,10 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + = render 'admin/admin_page_tabs' main.page-main From 067c205fcb6092191ac526bc296a48cb1a74c1ba Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 16:47:24 +0900 Subject: [PATCH 020/101] =?UTF-8?q?FAQ=E3=81=AE=E8=A9=B3=E7=B4=B0=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E7=94=A8=E6=84=8F=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 4 +++- app/views/admin/faq/_table.html.slim | 3 ++- app/views/admin/faq/show.html.slim | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 app/views/admin/faq/show.html.slim diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index 1d96becced3..78d4df6f4b3 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Admin::FAQController < AdminController - before_action :set_faq, only: %i[edit update destroy] + before_action :set_faq, only: %i[show edit update destroy] def index @faqs = FAQ.default_order end @@ -20,6 +20,8 @@ def create end end + def show; end + def edit; end def update diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index d7d9404c01b..27f508c5e20 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -9,7 +9,8 @@ - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") td.admin-table__item-value.is-text-align-center - = format_question(faq.question) + = link_to admin_faq_path(faq) do + = format_question(faq.question) td.admin-table__item-value.is-text-align-center = faq.answer td.admin-table__item-value.is-text-align-center diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim new file mode 100644 index 00000000000..6f2adbadcd9 --- /dev/null +++ b/app/views/admin/faq/show.html.slim @@ -0,0 +1,14 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' + +p = format_question(@faq.question) +p = @faq.answer +p + = link_to edit_admin_faq_path(@faq) do + = '編集' From acf10f70e05d78d400b151a8e975ac04cf40e42b Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 17:18:39 +0900 Subject: [PATCH 021/101] =?UTF-8?q?FAQ=E6=9B=B4=E6=96=B0=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=83=80=E3=82=A4=E3=83=AC=E3=82=AF=E3=83=88=E5=85=88?= =?UTF-8?q?=E3=82=92=E5=80=8B=E5=88=A5=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index 78d4df6f4b3..c078cb67601 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -26,7 +26,7 @@ def edit; end def update if @faq.update(faq_params) - redirect_to admin_faqs_path, notice: 'FAQを更新しました。' + redirect_to admin_faq_path(@faq), notice: 'FAQを更新しました。' else render 'edit' end From fd6d8e40e4ce4b8165da44c167a57a234f6cf053 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 17:35:26 +0900 Subject: [PATCH 022/101] =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=80=85=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=A7FAQ=E3=82=BF=E3=83=96=E3=82=92?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=83=E3=82=AF=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8B=E7=8A=B6=E6=85=8B=E3=81=A7=E3=82=A2=E3=82=AF=E3=83=86?= =?UTF-8?q?=E3=82=A3=E3=83=96=E3=81=AB=E3=81=AA=E3=82=89=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=83=90=E3=82=B0=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/_admin_page_tabs.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/_admin_page_tabs.html.slim b/app/views/admin/_admin_page_tabs.html.slim index 714e767760b..0b6fac6ca1a 100644 --- a/app/views/admin/_admin_page_tabs.html.slim +++ b/app/views/admin/_admin_page_tabs.html.slim @@ -28,4 +28,4 @@ li.page-tabs__item = link_to 'FAQ', admin_faqs_path, - class: "page-tabs__item-link #{current_link(/^admin-faqs/)}" + class: "page-tabs__item-link #{current_link(/^admin-faq/)}" From 9282de8970c765bdd450d82ab955afd503105c5e Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 17:42:56 +0900 Subject: [PATCH 023/101] =?UTF-8?q?=E8=A9=B3=E7=B4=B0=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=AB=E3=83=98=E3=83=83=E3=83=80=E3=83=BC=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/show.html.slim | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index 6f2adbadcd9..55755a8cd74 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -7,8 +7,23 @@ header.page-header = render 'admin/admin_page_tabs' -p = format_question(@faq.question) -p = @faq.answer -p - = link_to edit_admin_faq_path(@faq) do - = '編集' +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQ詳細 + .page-main-header__end + .page-main-header-actions + ul.page-main-header-actions__items + li.page-main-header-actions__item + = link_to 'FAQ一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' +.page-body + .container.is-md + dl + dt = format_question(@faq.question) + dd = @faq.answer + p + = link_to edit_admin_faq_path(@faq) do + = '編集' From 772e3eeca76ded9aca1d0fa39a433e31ff44b1b9 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 21 Jul 2023 13:06:04 +0900 Subject: [PATCH 024/101] =?UTF-8?q?FAQ=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=81=ABposition=E3=82=AB=E3=83=A9=E3=83=A0=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- app/controllers/welcome_controller.rb | 2 +- app/models/faq.rb | 3 +- db/data/20230716015559_add_multi_faq.rb | 28 ++++++++++++- db/fixtures/faqs.yml | 42 +++++++++---------- .../20230721033152_add_position_to_faq.rb | 5 +++ db/schema.rb | 1 + test/fixtures/faqs.yml | 42 +++++++++---------- 8 files changed, 78 insertions(+), 47 deletions(-) create mode 100644 db/migrate/20230721033152_add_position_to_faq.rb diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index c078cb67601..79a5fff972c 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -3,7 +3,7 @@ class Admin::FAQController < AdminController before_action :set_faq, only: %i[show edit update destroy] def index - @faqs = FAQ.default_order + @faqs = FAQ.all end def new diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index b44f85a01b8..54c5197b8ab 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,7 +16,7 @@ def job_support; end def pricing; end def faq - @faqs = FAQ.default_order + @faqs = FAQ.all end def training; end diff --git a/app/models/faq.rb b/app/models/faq.rb index 877ec7f3075..a3f6c2ff0f9 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -4,5 +4,6 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true - scope :default_order, -> { order(created_at: :asc) } + default_scope -> { order(:position) } + acts_as_list end diff --git a/db/data/20230716015559_add_multi_faq.rb b/db/data/20230716015559_add_multi_faq.rb index 8c4442ed9d2..d6d6ccbab30 100644 --- a/db/data/20230716015559_add_multi_faq.rb +++ b/db/data/20230716015559_add_multi_faq.rb @@ -1,95 +1,119 @@ # frozen_string_literal: true -class AddMultiFAQ < ActiveRecord::Migration[6.1] +class AddMultiFAQ < ActiveRecord::Migration[6.1] # rubocop:disable Metrics/ClassLength MULTI_FAQ = [ { + position: 1, question: '学習を終えるのにどれくらいの時間がかかりますか', answer: "かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\nフィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\nとはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。" # rubocop:disable Layout/LineLength }, { + position: 2, question: '途中で辞めることは可能ですか', answer: "いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\nフィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\nプログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。" # rubocop:disable Layout/LineLength }, { + position: 3, question: '学習はオンラインだけですか', answer: "オンラインだけです。\n\nオンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。" }, { + position: 4, question: '休会をすることは可能ですか', answer: '最大3ヶ月まで休会をすることが可能です。' }, { + position: 5, question: 'わからないことがあった場合、質問はできますか', answer: "できます。\n\nフィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。" # rubocop:disable Layout/LineLength }, { + position: 6, question: '退会した月は料金が日割りで請求されますか', answer: '退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。' }, { + position: 7, question: '仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか', answer: '学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。' }, { + position: 8, question: '就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか', answer: 'はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。' }, { + position: 9, question: '転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか', answer: '可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。' }, { + position: 10, question: '現在、大学に在学中なのですが、参加できますか', answer: '学生でも参加可能です。年齢に制限はありません。' }, { + position: 11, question: 'Linuxで学習をしたいのですが可能ですか', answer: 'Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。' # rubocop:disable Layout/LineLength }, { + position: 12, question: 'Windowsで学習をしたいのですが可能ですか', answer: "Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n[WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n[WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)" # rubocop:disable Layout/LineLength }, { + position: 13, question: '古い OS のままで学習をしたいのですが可能ですか', answer: 'カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。' # rubocop:disable Layout/LineLength }, { + position: 14, question: '転職エージェントを使って就職活動をすることは可能ですか', answer: 'はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。' }, { + position: 15, question: '卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか', answer: '個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。' # rubocop:disable Layout/LineLength }, { + position: 16, question: 'プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか', answer: "全く問題ありません。\n\nフィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\nたくさんの女性が卒業しプログラマーとして就職し活躍しています。" # rubocop:disable Layout/LineLength }, { + position: 17, question: '30代なのですが、エンジニアとして就職することは可能ですか', answer: "今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\nまた、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。" # rubocop:disable Layout/LineLength }, { + position: 18, question: '会社の新人研修など法人での利用はできますか', answer: "可能です。\n\n法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。" }, { + position: 19, question: '何をしたら卒業になりますか', answer: "全てのプラクティスを修了したら卒業になります。\n\n最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。" }, { + position: 20, question: '利用料の領収書は発行してもらえますか', answer: "発行します。\n\nStripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。" }, { + position: 21, question: 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか', answer: "可能です。\n\nフィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\nオンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。" # rubocop:disable Layout/LineLength } ].freeze def up - MULTI_FAQ.each { |faq| FAQ.create(question: faq[:question], answer: faq[:answer]) } + MULTI_FAQ.each do |faq| + position, question, answer = faq.values_at(:position, :faq, :answer) + FAQ.create(position:, question:, answer:) + end end def down diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 441f04f6471..91060036858 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -1,5 +1,5 @@ faq1: - id: 1 + position: 1 question: 学習を終えるのにどれくらいの時間がかかりますか answer: "\ かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n\ @@ -10,7 +10,7 @@ faq1: " faq2: - id: 2 + position: 2 question: 途中で辞めることは可能ですか answer: "\ いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ @@ -19,7 +19,7 @@ faq2: " faq3: - id: 3 + position: 3 question: 学習はオンラインだけですか answer: "\ オンラインだけです。\n\n\ @@ -27,12 +27,12 @@ faq3: " faq4: - id: 4 + position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 faq5: - id: 5 + position: 5 question: わからないことがあった場合、質問はできますか answer: "\ できます。\n\n\ @@ -42,37 +42,37 @@ faq5: " faq6: - id: 6 + position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 faq7: - id: 7 + position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 faq8: - id: 8 + position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 faq9: - id: 9 + position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 faq10: - id: 10 + position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 faq11: - id: 11 + position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 faq12: - id: 12 + position: 12 question: Windowsで学習をしたいのですが可能ですか answer: "\ Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ @@ -81,22 +81,22 @@ faq12: " faq13: - id: 13 + position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 faq14: - id: 14 + position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 faq15: - id: 15 + position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 faq16: - id: 16 + position: 16 question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか answer: "\ 全く問題ありません。\n\n\ @@ -105,7 +105,7 @@ faq16: " faq17: - id: 17 + position: 17 question: 30代なのですが、エンジニアとして就職することは可能ですか answer: "\ 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n\ @@ -116,7 +116,7 @@ faq17: " faq18: - id: 18 + position: 18 question: 会社の新人研修など法人での利用はできますか answer: "\ 可能です。\n\n\ @@ -124,7 +124,7 @@ faq18: " faq19: - id: 19 + position: 19 question: 何をしたら卒業になりますか answer: "\ 全てのプラクティスを修了したら卒業になります。\n\n\ @@ -132,7 +132,7 @@ faq19: " faq20: - id: 20 + position: 20 question: 利用料の領収書は発行してもらえますか answer: "\ 発行します。\n\n\ @@ -140,7 +140,7 @@ faq20: " faq21: - id: 21 + position: 21 question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか answer: "\ 可能です。\n\n\ diff --git a/db/migrate/20230721033152_add_position_to_faq.rb b/db/migrate/20230721033152_add_position_to_faq.rb new file mode 100644 index 00000000000..47bcd60cdcd --- /dev/null +++ b/db/migrate/20230721033152_add_position_to_faq.rb @@ -0,0 +1,5 @@ +class AddPositionToFAQ < ActiveRecord::Migration[6.1] + def change + add_column :faqs, :position, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 62edd8e25f0..b0b4e20c89a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -272,6 +272,7 @@ t.string "question", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.integer "position" t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true t.index ["question"], name: "index_faqs_on_question", unique: true end diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 441f04f6471..91060036858 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -1,5 +1,5 @@ faq1: - id: 1 + position: 1 question: 学習を終えるのにどれくらいの時間がかかりますか answer: "\ かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n\ @@ -10,7 +10,7 @@ faq1: " faq2: - id: 2 + position: 2 question: 途中で辞めることは可能ですか answer: "\ いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ @@ -19,7 +19,7 @@ faq2: " faq3: - id: 3 + position: 3 question: 学習はオンラインだけですか answer: "\ オンラインだけです。\n\n\ @@ -27,12 +27,12 @@ faq3: " faq4: - id: 4 + position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 faq5: - id: 5 + position: 5 question: わからないことがあった場合、質問はできますか answer: "\ できます。\n\n\ @@ -42,37 +42,37 @@ faq5: " faq6: - id: 6 + position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 faq7: - id: 7 + position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 faq8: - id: 8 + position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 faq9: - id: 9 + position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 faq10: - id: 10 + position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 faq11: - id: 11 + position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 faq12: - id: 12 + position: 12 question: Windowsで学習をしたいのですが可能ですか answer: "\ Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ @@ -81,22 +81,22 @@ faq12: " faq13: - id: 13 + position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 faq14: - id: 14 + position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 faq15: - id: 15 + position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 faq16: - id: 16 + position: 16 question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか answer: "\ 全く問題ありません。\n\n\ @@ -105,7 +105,7 @@ faq16: " faq17: - id: 17 + position: 17 question: 30代なのですが、エンジニアとして就職することは可能ですか answer: "\ 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n\ @@ -116,7 +116,7 @@ faq17: " faq18: - id: 18 + position: 18 question: 会社の新人研修など法人での利用はできますか answer: "\ 可能です。\n\n\ @@ -124,7 +124,7 @@ faq18: " faq19: - id: 19 + position: 19 question: 何をしたら卒業になりますか answer: "\ 全てのプラクティスを修了したら卒業になります。\n\n\ @@ -132,7 +132,7 @@ faq19: " faq20: - id: 20 + position: 20 question: 利用料の領収書は発行してもらえますか answer: "\ 発行します。\n\n\ @@ -140,7 +140,7 @@ faq20: " faq21: - id: 21 + position: 21 question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか answer: "\ 可能です。\n\n\ From 18eb608407ca240655a333b23e493cea23c7b66b Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 28 Jul 2023 20:52:40 +0900 Subject: [PATCH 025/101] =?UTF-8?q?=E7=AE=A1=E7=90=86=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=A7FAQ=E3=81=AE=E4=B8=A6=E3=81=B3=E6=9B=BF?= =?UTF-8?q?=E3=81=88=E3=82=92=E8=A1=8C=E3=81=88=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/admin/faq_controller.rb | 12 ++++++++ app/javascript/packs/application.js | 1 + app/javascript/sort-faq.js | 22 +++++++++++++ app/views/admin/faq/_table.html.slim | 8 +++-- config/routes/api.rb | 1 + test/integration/api/admin/faq_test.rb | 22 +++++++++++++ test/system/api/admin/faq_test.rb | 34 +++++++++++++++++++++ 7 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 app/controllers/api/admin/faq_controller.rb create mode 100644 app/javascript/sort-faq.js create mode 100644 test/integration/api/admin/faq_test.rb create mode 100644 test/system/api/admin/faq_test.rb diff --git a/app/controllers/api/admin/faq_controller.rb b/app/controllers/api/admin/faq_controller.rb new file mode 100644 index 00000000000..e56eac06318 --- /dev/null +++ b/app/controllers/api/admin/faq_controller.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class API::Admin::FAQController < API::Admin::BaseController + def update + @faq = FAQ.find(params[:id]) + if @faq.insert_at(params[:insert_at].to_i) + head :no_content + else + render json: @faq.errors, status: :unprocessable_entity + end + end +end diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 852818e886c..683e517be29 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -57,6 +57,7 @@ import '../invitation-url-updater.js' import '../payment-methods-check-boxes.js' import '../product-checker.js' import '../user-follow.js' +import '../sort-faq.js' import VueMounter from '../VueMounter.js' import Questions from '../components/questions.vue' diff --git a/app/javascript/sort-faq.js b/app/javascript/sort-faq.js new file mode 100644 index 00000000000..1128d4a15f2 --- /dev/null +++ b/app/javascript/sort-faq.js @@ -0,0 +1,22 @@ +import Sortable from 'sortablejs' +import Bootcamp from 'bootcamp' + +document.addEventListener('DOMContentLoaded', () => { + const element = document.querySelector('#js-faq-sortable') + if (!element) { + return null + } + + Sortable.create(element, { + handle: '.js-grab', + onEnd(event) { + const id = event.item.dataset.faq_id + const params = { insert_at: event.newIndex + 1 } + const url = `/api/admin/faqs/${id}` + + Bootcamp.patch(url, params).catch((error) => { + console.warn(error) + }) + } + }) +}) diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 27f508c5e20..0d8ea87783a 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -5,9 +5,10 @@ th.admin-table__label 質問 th.admin-table__label 回答 th.admin-table__label 編集 - tbody.admin-table__items + th.admin-table__label 並び順 + tbody.admin-table__items#js-faq-sortable - faqs.each do |faq| - tr.admin-table__item(id="faq_#{faq.id}") + tr.admin-table__item(data-faq_id="#{faq.id}") td.admin-table__item-value.is-text-align-center = link_to admin_faq_path(faq) do = format_question(faq.question) @@ -16,3 +17,6 @@ td.admin-table__item-value.is-text-align-center = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen + td.admin-table__item-value.is-text-align-center.is-grab + span.js-grab.a-grab + i.fa-solid.fa-align-justify diff --git a/config/routes/api.rb b/config/routes/api.rb index c1c8f4901cd..7c8e105b6ad 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -5,6 +5,7 @@ namespace 'admin' do resource :count, controller: 'count', only: %i(show) resources :companies, only: %i(index destroy) + resources :faqs, only: %i(update), controller: 'faq' end namespace 'mentor' do resources :practices, only: %i(index) diff --git a/test/integration/api/admin/faq_test.rb b/test/integration/api/admin/faq_test.rb new file mode 100644 index 00000000000..0f096407ae1 --- /dev/null +++ b/test/integration/api/admin/faq_test.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'test_helper' + +class API::Admin::FAQTest < ActionDispatch::IntegrationTest + test 'PATCH /api/admin/faqs/:id' do + target = faqs(:faq1) + + invalid_token = create_token('hatsuno', 'testtest') + patch api_admin_faq_path(target), + headers: { 'Authorization' => "Bearer #{invalid_token}" } + assert_response :unauthorized + + valid_token = create_token('komagata', 'testtest') + patch( + api_admin_faq_path(target), + params: { insert_at: 2 }, + headers: { 'Authorization' => "Bearer #{valid_token}" } + ) + assert_response :no_content + end +end diff --git a/test/system/api/admin/faq_test.rb b/test/system/api/admin/faq_test.rb new file mode 100644 index 00000000000..46742e755da --- /dev/null +++ b/test/system/api/admin/faq_test.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require 'application_system_test_case' + +class API::Admin::FAQTest < ApplicationSystemTestCase + test 'sort FAQ' do + visit faq_path + assert_equal all('h3.faqs-item__title').first.text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.faqs-item__title').last.text, 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか?' + + visit_with_auth admin_faqs_path, 'komagata' + source = all('.js-grab.a-grab').first + target = all('.js-grab.a-grab').last + source.drag_to(target) + + visit faq_path + assert_equal all('h3.faqs-item__title').last.text, '学習を終えるのにどれくらいの時間がかかりますか?' + end + + test "doesn't affect the order of other FAQs" do + visit faq_path + assert_equal all('h3.faqs-item__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.faqs-item__title')[1].text, '途中で辞めることは可能ですか?' + + visit_with_auth admin_faqs_path, 'komagata' + source = all('.js-grab')[7] # faq8 + target = all('.js-grab')[9] # faq10 + source.drag_to(target) + + visit faq_path + assert_equal all('h3.faqs-item__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.faqs-item__title')[1].text, '途中で辞めることは可能ですか?' + end +end From f2c243709428d7d56f75fba92212f454d8448a2f Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sat, 29 Jul 2023 09:15:51 +0900 Subject: [PATCH 026/101] =?UTF-8?q?circleCI=E3=82=92=E9=80=9A=E3=81=99?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=81=AB=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E5=90=8D=E3=82=92=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/api/admin/faq_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/system/api/admin/faq_test.rb b/test/system/api/admin/faq_test.rb index 46742e755da..a00fc93fb25 100644 --- a/test/system/api/admin/faq_test.rb +++ b/test/system/api/admin/faq_test.rb @@ -2,7 +2,7 @@ require 'application_system_test_case' -class API::Admin::FAQTest < ApplicationSystemTestCase +class API::Admin::FaqTest < ApplicationSystemTestCase test 'sort FAQ' do visit faq_path assert_equal all('h3.faqs-item__title').first.text, '学習を終えるのにどれくらいの時間がかかりますか?' From d339cda66b65167df2e1a264a4fab38264d3fbc6 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Wed, 2 Aug 2023 09:17:27 +0900 Subject: [PATCH 027/101] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E5=90=8D?= =?UTF-8?q?=E3=81=AE=E3=82=BF=E3=82=A4=E3=83=9D=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/admin/faq_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/system/admin/faq_test.rb b/test/system/admin/faq_test.rb index 11f3d6b03f2..4b41365d41b 100644 --- a/test/system/admin/faq_test.rb +++ b/test/system/admin/faq_test.rb @@ -44,7 +44,7 @@ class Admin::FAQTest < ApplicationSystemTestCase assert_selector '.markdown-form__preview a', text: 'test' end - test 'delete company' do + test 'delete FAQ' do visit_with_auth "/admin/faqs/#{faqs(:faq1).id}/edit", 'komagata' click_on '削除' page.driver.browser.switch_to.alert.accept From c2db54092b2083e1f219c53381cb20a629f50ea7 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Wed, 2 Aug 2023 09:38:27 +0900 Subject: [PATCH 028/101] =?UTF-8?q?FAQ=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=81=AEanswer=E3=82=AB=E3=83=A9=E3=83=A0=E3=82=92text?= =?UTF-8?q?=E5=9E=8B=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/migrate/20230802001904_change_datatype_answer_of_faq.rb | 5 +++++ db/schema.rb | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20230802001904_change_datatype_answer_of_faq.rb diff --git a/db/migrate/20230802001904_change_datatype_answer_of_faq.rb b/db/migrate/20230802001904_change_datatype_answer_of_faq.rb new file mode 100644 index 00000000000..589b328a72d --- /dev/null +++ b/db/migrate/20230802001904_change_datatype_answer_of_faq.rb @@ -0,0 +1,5 @@ +class ChangeDatatypeAnswerOfFAQ < ActiveRecord::Migration[6.1] + def change + change_column :faqs, :answer, :text, null: false, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index b0b4e20c89a..c2e3cf2a193 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -268,7 +268,7 @@ end create_table "faqs", force: :cascade do |t| - t.string "answer", null: false + t.text "answer", null: false t.string "question", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false @@ -768,8 +768,8 @@ t.string "profile_job" t.text "profile_text" t.string "feed_url" - t.boolean "sent_student_followup_message", default: false t.string "times_id", comment: "Snowflake ID" + t.boolean "sent_student_followup_message", default: false t.string "country_code" t.string "subdivision_code" t.boolean "auto_retire", default: true From 9763ca088acdbfb951bc65953fbe5991557961c0 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 3 Aug 2023 09:47:19 +0900 Subject: [PATCH 029/101] =?UTF-8?q?=E8=B3=AA=E5=95=8F=E3=81=AE=E5=85=A5?= =?UTF-8?q?=E5=8A=9B=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=82=92text=5Far?= =?UTF-8?q?ea=E3=81=8B=E3=82=89input=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index a2c30a24f6a..be983f6badc 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -2,7 +2,7 @@ .form__items .form-item = f.label :question, class: 'a-form-label' - = f.text_area :question, class: 'a-text-input' + = f.text_field :question, class: 'a-text-input' .form-item .row.js-markdown-parent .col-md-6.col-xs-12 From ad6f76d68a3ab065f3a01be33a98ab3a616c731b Mon Sep 17 00:00:00 2001 From: machida Date: Wed, 30 Aug 2023 15:11:59 +0900 Subject: [PATCH 030/101] =?UTF-8?q?=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=81=AE=E6=A7=8B=E9=80=A0=E3=82=92=E3=81=96=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E6=A7=8B=E7=AF=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stylesheets/config/variables/_colors.sass | 2 +- app/views/admin/faq/edit.html.slim | 26 ++++++++++++++----- app/views/admin/faq/index.html.slim | 3 ++- app/views/admin/faq/new.html.slim | 7 ++--- app/views/admin/faq/show.html.slim | 17 ++++++------ 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/app/javascript/stylesheets/config/variables/_colors.sass b/app/javascript/stylesheets/config/variables/_colors.sass index 97fe85f7a2b..563e567bf89 100644 --- a/app/javascript/stylesheets/config/variables/_colors.sass +++ b/app/javascript/stylesheets/config/variables/_colors.sass @@ -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 diff --git a/app/views/admin/faq/edit.html.slim b/app/views/admin/faq/edit.html.slim index 6e9e6822580..085ce20ba96 100644 --- a/app/views/admin/faq/edit.html.slim +++ b/app/views/admin/faq/edit.html.slim @@ -3,16 +3,30 @@ header.page-header .container .page-header__inner - h1.page-header__title = title + h1.page-header__title + | 管理ページ .page-header-actions .page-header-actions__items .page-header-actions__item = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do i.fa-regular.fa-plus - | FAQ追加 - + | FAQ編集 = render 'admin/admin_page_tabs' -.page-body - .container.is-md - = render 'form', faq: @faq +hr.a-border-tint + +.page-main + .page-main-header + .container.is-lg + .page-main-header__inner + h1.page-main-header__title + = title + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQ編集 + .page-body + .container.is-lg + = render 'form', faq: @faq diff --git a/app/views/admin/faq/index.html.slim b/app/views/admin/faq/index.html.slim index 8694d951636..e168f6d17de 100644 --- a/app/views/admin/faq/index.html.slim +++ b/app/views/admin/faq/index.html.slim @@ -21,6 +21,7 @@ main.page-main = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do i.fa-regular.fa-plus | FAQ追加 + hr.a-border .page-body - .container.is-lg + .container.is-xl = render 'table', faqs: @faqs diff --git a/app/views/admin/faq/new.html.slim b/app/views/admin/faq/new.html.slim index 56c40442652..bc35c446241 100644 --- a/app/views/admin/faq/new.html.slim +++ b/app/views/admin/faq/new.html.slim @@ -19,6 +19,7 @@ main.page-main ul.page-main-header-actions__items li.page-main-header-actions__item = link_to 'FAQ一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' -.page-body - .container.is-md - = render 'form', faq: @faq + hr.a-border + .page-body + .container.is-xl + = render 'form', faq: @faq diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index 55755a8cd74..b4c2bd07b87 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -19,11 +19,12 @@ main.page-main ul.page-main-header-actions__items li.page-main-header-actions__item = link_to 'FAQ一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' -.page-body - .container.is-md - dl - dt = format_question(@faq.question) - dd = @faq.answer - p - = link_to edit_admin_faq_path(@faq) do - = '編集' + hr.a-border + .page-body + .container.is-md + dl + dt = format_question(@faq.question) + dd = @faq.answer + p + = link_to edit_admin_faq_path(@faq) do + = '編集' From c6e1cd12394ba93b6d0fdbb3adb129dc844e14e6 Mon Sep 17 00:00:00 2001 From: machida Date: Thu, 31 Aug 2023 19:22:23 +0900 Subject: [PATCH 031/101] =?UTF-8?q?Admin=20=E3=81=AE=20FAQ=E8=A9=B3?= =?UTF-8?q?=E7=B4=B0=E3=81=AB=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3=E5=85=A5?= =?UTF-8?q?=E3=82=8C=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/edit.html.slim | 28 ++++++-------- app/views/admin/faq/show.html.slim | 49 +++++++++++++++++++----- app/views/reports/_report_body.html.slim | 4 +- 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/app/views/admin/faq/edit.html.slim b/app/views/admin/faq/edit.html.slim index 085ce20ba96..11a6158071f 100644 --- a/app/views/admin/faq/edit.html.slim +++ b/app/views/admin/faq/edit.html.slim @@ -5,28 +5,24 @@ header.page-header .page-header__inner h1.page-header__title | 管理ページ - .page-header-actions - .page-header-actions__items - .page-header-actions__item - = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do - i.fa-regular.fa-plus - | FAQ編集 = render 'admin/admin_page_tabs' hr.a-border-tint .page-main .page-main-header - .container.is-lg + .container .page-main-header__inner - h1.page-main-header__title - = title - .page-header-actions - .page-header-actions__items - .page-header-actions__item - = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do - i.fa-regular.fa-plus - | FAQ編集 + .page-main-header__start + h1.page-main-header__title + = title + .page-main-header__end + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to admin_faq_path, class: 'a-button is-md is-secondary is-block is-back' do + | FAQ一覧 + hr.a-border .page-body - .container.is-lg + .container.is-xl = render 'form', faq: @faq diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index b4c2bd07b87..550d9270a73 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -13,18 +13,49 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title - | FAQ詳細 + | FAQ 詳細 .page-main-header__end .page-main-header-actions ul.page-main-header-actions__items li.page-main-header-actions__item - = link_to 'FAQ一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' + = link_to admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back is-back' do + | FAQ一覧 hr.a-border .page-body - .container.is-md - dl - dt = format_question(@faq.question) - dd = @faq.answer - p - = link_to edit_admin_faq_path(@faq) do - = '編集' + .container.is-xxl + .row.justify-center + .col-xl-7.col-xs-12 + .page-content + header.page-content-header + // + .page-content-header__start + .page-content-header__user + = render 'users/icon', user: @faq.user, link_class: 'page-content-header__user-link', image_class: 'page-content-header__user-icon' + .page-content-header__end + .page-content-header__row + // + .page-content-header__before-title + = link_to @faq.user, class: 'a-user-name' do + = @faq.user.long_name + h1.page-content-header__title + = format_question(@faq.question) + + .page-content-header__row + .page-content-header-metas + .page-content-header-metas__start + .page-content-header-metas__meta + .a-meta + | #{l @faq.created_at} 公開 + + .a-card + .card-body + .card__description + .js-markdown-view.a-long-text.is-md + = @faq.answer + .card-footer + .card-main-actions + .card-main-actions__items + .card-main-actions__item + = link_to edit_admin_faq_path(@faq), class: 'card-main-actions__action a-button is-sm is-secondary is-block' do + i.fa-solid.fa-pen + | 内容修正 diff --git a/app/views/reports/_report_body.html.slim b/app/views/reports/_report_body.html.slim index 34a124f7557..9ff8c49b48f 100644 --- a/app/views/reports/_report_body.html.slim +++ b/app/views/reports/_report_body.html.slim @@ -10,8 +10,8 @@ = render 'reactions/reactions', reactionable: report - if report.user_id == current_user.id || mentor_login? - hr.a-border-tint - .card-footer(class="#{mentor_login? ? 'is-only-mentor' : ''}") + hr.a-border-tint(class="#{mentor_login? ? 'is-only-mentor' : ''}") + footer.card-footer(class="#{mentor_login? ? 'is-only-mentor' : ''}") .card-main-actions ul.card-main-actions__items li.card-main-actions__item From d6a485ca1f4e839d12a39d76d1e682f7a4b4da94 Mon Sep 17 00:00:00 2001 From: machida Date: Tue, 8 Oct 2024 21:48:54 +0900 Subject: [PATCH 032/101] =?UTF-8?q?=E6=96=B0=E3=83=87=E3=82=B6=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=92=E9=81=A9=E7=94=A8=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/welcome/_faq.html.slim | 594 ++++++++++++------------ db/data/20230716015559_add_multi_faq.rb | 42 +- db/fixtures/faqs.yml | 42 +- db/schema.rb | 1 - 4 files changed, 350 insertions(+), 329 deletions(-) diff --git a/app/views/welcome/_faq.html.slim b/app/views/welcome/_faq.html.slim index b63830b6046..6dcd0e8a59c 100644 --- a/app/views/welcome/_faq.html.slim +++ b/app/views/welcome/_faq.html.slim @@ -1,14 +1,14 @@ .lp section.lp-content.is-lp-bg-1.is-top-title - .l-container.is-xl + .l-container.is-lg .lp-content__inner .lp-content__start header.lp-content__header h2.lp-content-title.text-center.is-border-bottom | よくある質問 .lp-content__end - .row.is-gutter-width-32.justify-center - // + .lp-faqs + .row.is-gutter-width-32 .col-xl-4.col-lg-4.col-xs-12 .a-card | それは黄金の昼下がり気ままにただようぼくらオールは二本ともあぶなげに小さな腕で漕がれ小さな手がぼくらのただよいを導こうとかっこうだけ申し訳につけてああ残酷な三人!こんな時間にこんな夢見る天気のもとで @@ -21,289 +21,311 @@ | こちら | から質問してください。 - .col-xl-8.col-lg-8.col-xs-12 - section.welcome-sections.is-faq#faq - .welcome-section__faqs - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 学習を終えるのにどれくらいの時間がかかりますか? - .faqs-item__body - .a-long-text.is-md - p - | かかる時間は人それぞれですが、プログラム経験が全くない人の場合、 - | 1,200時間くらいかかる方が多いです。 - p - | 覚えが早い、遅いも関係しますが、 - | 短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。 - p - | 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、 - | 就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。 - p - | フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、 - | 泣く泣くカリキュラムを削ったりなどもしているのですが、 - | 年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、 - | なかなか卒業までの時間を短縮させるのが難しいです。 - p - | とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは - | 何一つなかった、と言ってくれてます(自慢)。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 途中で辞めることは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | いつでも退会ができます。退会をすると翌月からの請求は止まります。 - | 退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、 - | 学習をやめる場合は必ず退会を行ってください。 - p - | フィヨルドブートキャンプでは、プログラマーになることを考えたけど、 - | 自分には向いていなかったことに気づくことも大きな価値だと考えています。 - p - | プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを - | 最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 学習はオンラインだけですか? - .faqs-item__body - .a-long-text.is-md - p - | オンラインだけです。 - p - | オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる - | 飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの - | 何かしらのオンラインイベントが毎日のように開催されています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 休会をすることは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | 最大3ヶ月まで休会をすることが可能です。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | わからないことがあった場合、質問はできますか? - .faqs-item__body - .a-long-text.is-md - p - | できます。 - p - | フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、 - | とても長くプログラミング教育をやってきたのですが、 - | その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。 - p - | 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、 - | 質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、 - | それを鍛えるためにたくさんの質問をする方法を用意しています。 - p - | 学習をする度に提出する日報に質問を書く、 - | フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、 - | 質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、 - | メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 退会した月は料金が日割りで請求されますか? - .faqs-item__body - .a-long-text.is-md - p - | 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? - .faqs-item__body - .a-long-text.is-md - p - | 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。 - | ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。 - | もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、 - | 就職を必ずしなくてはいけないという縛りはありません。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 現在、大学に在学中なのですが、参加できますか? - .faqs-item__body - .a-long-text.is-md - p - | 学生でも参加可能です。年齢に制限はありません。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | Linuxで学習をしたいのですが可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | Linuxでも可能ですが条件があります。 - | 用意しているカリキュラムは Mac を想定して作られています。 - | そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムを - | Linuxに合わせて操作方法などを変える必要があります。 - | それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | Windowsで学習をしたいのですが可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。 - | WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。 - | そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。 - p = link_to 'WSL2が使えるマシンとは?', 'https://bootcamp.fjord.jp/articles/32' - p = link_to 'WSL2でLinuxを使おう', 'https://bootcamp.fjord.jp/articles/6' + .col-xl-8.col-lg-8.col-xs-12 + .lp-faqs__items + - @faqs.each do |faq| + section.lp-faq + .lp-faq__inner + header.lp-faq__header + h3.lp-faq__title + = faq.question + .lp-faq__body + .a-short-text + = simple_format h faq.answer + hr.a-border - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 古い OS のままで学習をしたいのですが可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | カリキュラムが、最新の Mac の OS を想定して作られています。 - | 多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。 - | 何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、 - | それとは別の Mac を用意してから参加されることをおすすめします。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 転職エージェントを使って就職活動をすることは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? - .faqs-item__body - .a-long-text.is-md - p - | 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、 - | 推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。 - | ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、 - | それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか? - .faqs-item__body - .a-long-text.is-md - p - | 全く問題ありません。 - p - | フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、 - | 正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。 - | イベントによっては女性の参加者の方が多いこともあります。 - p - | たくさんの女性が卒業しプログラマーとして就職し活躍しています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 30代なのですが、エンジニアとして就職することは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。 - | 特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。 - p - | 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。 - p - | 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、 - | 就職をするためにはそれ以外の要素も必要ですが、 - | 30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、 - | 高いコミュニケーション能力を求められる傾向にあります。 - p - | 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、 - | どの会社でどんな仕事をすれば自分の価値を出せるか? - | そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。 - p - | また、40代以上に強そうな転職エージェントを探し、 - | 予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 会社の新人研修など法人での利用はできますか? - .faqs-item__body - .a-long-text.is-md - p - | 可能です。 - p - | 法人でのご利用については#{link_to 'こちら', training_path}に詳細を記載しております。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 何をしたら卒業になりますか? - .faqs-item__body - .a-long-text.is-md - p - | 全てのプラクティスを修了したら卒業になります。 - p - | 最後のプラクティスが自作サービスをリリースする、というものになっています。 - | 月に一回行っている卒業式で、自作サービスの発表をしてもらい、 - | その後に卒業証書授与を行っています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 利用料の領収書は発行してもらえますか? - .faqs-item__body - .a-long-text.is-md - p - | 発行します。 - p - | Stripe という決済サービスを利用しているのですが、 - | それが発行する領収書をダウンロードすることができます。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか? - .faqs-item__body + + + + + + + + + + // + section.welcome-sections.is-faq#faq + .welcome-section__faqs + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 学習を終えるのにどれくらいの時間がかかりますか? + .faqs-item__body + .a-long-text.is-md + p + | かかる時間は人それぞれですが、プログラム経験が全くない人の場合、 + | 1,200時間くらいかかる方が多いです。 + p + | 覚えが早い、遅いも関係しますが、 + | 短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。 + p + | 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、 + | 就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。 + p + | フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、 + | 泣く泣くカリキュラムを削ったりなどもしているのですが、 + | 年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、 + | なかなか卒業までの時間を短縮させるのが難しいです。 + p + | とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは + | 何一つなかった、と言ってくれてます(自慢)。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 途中で辞めることは可能ですか? + .faqs-item__body .a-long-text.is-md p - | 可能です。 - p - | フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。 - | フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。 - p - | オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、 - | カメラをオンにすることは強制していません。 + | いつでも退会ができます。退会をすると翌月からの請求は止まります。 + | 退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、 + | 学習をやめる場合は必ず退会を行ってください。 + p + | フィヨルドブートキャンプでは、プログラマーになることを考えたけど、 + | 自分には向いていなかったことに気づくことも大きな価値だと考えています。 + p + | プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを + | 最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 学習はオンラインだけですか? + .faqs-item__body + .a-long-text.is-md + p + | オンラインだけです。 + p + | オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる + | 飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの + | 何かしらのオンラインイベントが毎日のように開催されています。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 休会をすることは可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | 最大3ヶ月まで休会をすることが可能です。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | わからないことがあった場合、質問はできますか? + .faqs-item__body + .a-long-text.is-md + p + | できます。 + p + | フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、 + | とても長くプログラミング教育をやってきたのですが、 + | その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。 + p + | 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、 + | 質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、 + | それを鍛えるためにたくさんの質問をする方法を用意しています。 + p + | 学習をする度に提出する日報に質問を書く、 + | フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、 + | 質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、 + | メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 退会した月は料金が日割りで請求されますか? + .faqs-item__body + .a-long-text.is-md + p + | 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? + .faqs-item__body + .a-long-text.is-md + p + | 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。 + | ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。 + | もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、 + | 就職を必ずしなくてはいけないという縛りはありません。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 現在、大学に在学中なのですが、参加できますか? + .faqs-item__body + .a-long-text.is-md + p + | 学生でも参加可能です。年齢に制限はありません。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | Linuxで学習をしたいのですが可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | Linuxでも可能ですが条件があります。 + | 用意しているカリキュラムは Mac を想定して作られています。 + | そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムを + | Linuxに合わせて操作方法などを変える必要があります。 + | それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | Windowsで学習をしたいのですが可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。 + | WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。 + | そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。 + p = link_to 'WSL2が使えるマシンとは?', 'https://bootcamp.fjord.jp/articles/32' + p = link_to 'WSL2でLinuxを使おう', 'https://bootcamp.fjord.jp/articles/6' + + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 古い OS のままで学習をしたいのですが可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | カリキュラムが、最新の Mac の OS を想定して作られています。 + | 多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。 + | 何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、 + | それとは別の Mac を用意してから参加されることをおすすめします。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 転職エージェントを使って就職活動をすることは可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? + .faqs-item__body + .a-long-text.is-md + p + | 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、 + | 推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。 + | ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、 + | それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか? + .faqs-item__body + .a-long-text.is-md + p + | 全く問題ありません。 + p + | フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、 + | 正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。 + | イベントによっては女性の参加者の方が多いこともあります。 + p + | たくさんの女性が卒業しプログラマーとして就職し活躍しています。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 30代なのですが、エンジニアとして就職することは可能ですか? + .faqs-item__body + .a-long-text.is-md + p + | 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。 + | 特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。 + p + | 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。 + p + | 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、 + | 就職をするためにはそれ以外の要素も必要ですが、 + | 30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、 + | 高いコミュニケーション能力を求められる傾向にあります。 + p + | 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、 + | どの会社でどんな仕事をすれば自分の価値を出せるか? + | そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。 + p + | また、40代以上に強そうな転職エージェントを探し、 + | 予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 会社の新人研修など法人での利用はできますか? + .faqs-item__body + .a-long-text.is-md + p + | 可能です。 + p + | 法人でのご利用については#{link_to 'こちら', training_path}に詳細を記載しております。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 何をしたら卒業になりますか? + .faqs-item__body + .a-long-text.is-md + p + | 全てのプラクティスを修了したら卒業になります。 + p + | 最後のプラクティスが自作サービスをリリースする、というものになっています。 + | 月に一回行っている卒業式で、自作サービスの発表をしてもらい、 + | その後に卒業証書授与を行っています。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | 利用料の領収書は発行してもらえますか? + .faqs-item__body + .a-long-text.is-md + p + | 発行します。 + p + | Stripe という決済サービスを利用しているのですが、 + | それが発行する領収書をダウンロードすることができます。 + section.faqs-item.a-card + .card-body__inner + header.faqs-item__header + h2.faqs-item__title + | フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか? + .faqs-item__body + .a-long-text.is-md + p + | 可能です。 + p + | フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。 + | フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。 + p + | オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、 + | カメラをオンにすることは強制していません。 diff --git a/db/data/20230716015559_add_multi_faq.rb b/db/data/20230716015559_add_multi_faq.rb index d6d6ccbab30..63142c29749 100644 --- a/db/data/20230716015559_add_multi_faq.rb +++ b/db/data/20230716015559_add_multi_faq.rb @@ -4,107 +4,107 @@ class AddMultiFAQ < ActiveRecord::Migration[6.1] # rubocop:disable Metrics/Class MULTI_FAQ = [ { position: 1, - question: '学習を終えるのにどれくらいの時間がかかりますか', + question: '学習を終えるのにどれくらいの時間がかかりますか?', answer: "かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\nフィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\nとはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。" # rubocop:disable Layout/LineLength }, { position: 2, - question: '途中で辞めることは可能ですか', + question: '途中で辞めることは可能ですか?', answer: "いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\nフィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\nプログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。" # rubocop:disable Layout/LineLength }, { position: 3, - question: '学習はオンラインだけですか', + question: '学習はオンラインだけですか?', answer: "オンラインだけです。\n\nオンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。" }, { position: 4, - question: '休会をすることは可能ですか', + question: '休会をすることは可能ですか?', answer: '最大3ヶ月まで休会をすることが可能です。' }, { position: 5, - question: 'わからないことがあった場合、質問はできますか', + question: 'わからないことがあった場合、質問はできますか?', answer: "できます。\n\nフィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。" # rubocop:disable Layout/LineLength }, { position: 6, - question: '退会した月は料金が日割りで請求されますか', + question: '退会した月は料金が日割りで請求されますか?', answer: '退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。' }, { position: 7, - question: '仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか', + question: '仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか?', answer: '学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。' }, { position: 8, - question: '就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか', + question: '就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか?', answer: 'はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。' }, { position: 9, - question: '転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか', + question: '転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか?', answer: '可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。' }, { position: 10, - question: '現在、大学に在学中なのですが、参加できますか', + question: '現在、大学に在学中なのですが、参加できますか?', answer: '学生でも参加可能です。年齢に制限はありません。' }, { position: 11, - question: 'Linuxで学習をしたいのですが可能ですか', + question: 'Linuxで学習をしたいのですが可能ですか?', answer: 'Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。' # rubocop:disable Layout/LineLength }, { position: 12, - question: 'Windowsで学習をしたいのですが可能ですか', + question: 'Windowsで学習をしたいのですが可能ですか?', answer: "Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n[WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n[WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)" # rubocop:disable Layout/LineLength }, { position: 13, - question: '古い OS のままで学習をしたいのですが可能ですか', + question: '古い OS のままで学習をしたいのですが可能ですか?', answer: 'カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。' # rubocop:disable Layout/LineLength }, { position: 14, - question: '転職エージェントを使って就職活動をすることは可能ですか', + question: '転職エージェントを使って就職活動をすることは可能ですか?', answer: 'はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。' }, { position: 15, - question: '卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか', + question: '卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか?', answer: '個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。' # rubocop:disable Layout/LineLength }, { position: 16, - question: 'プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか', + question: 'プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか?', answer: "全く問題ありません。\n\nフィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\nたくさんの女性が卒業しプログラマーとして就職し活躍しています。" # rubocop:disable Layout/LineLength }, { position: 17, - question: '30代なのですが、エンジニアとして就職することは可能ですか', + question: '30代なのですが、エンジニアとして就職することは可能ですか?', answer: "今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\nまた、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。" # rubocop:disable Layout/LineLength }, { position: 18, - question: '会社の新人研修など法人での利用はできますか', + question: '会社の新人研修など法人での利用はできますか?', answer: "可能です。\n\n法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。" }, { position: 19, - question: '何をしたら卒業になりますか', + question: '何をしたら卒業になりますか?', answer: "全てのプラクティスを修了したら卒業になります。\n\n最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。" }, { position: 20, - question: '利用料の領収書は発行してもらえますか', + question: '利用料の領収書は発行してもらえますか?', answer: "発行します。\n\nStripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。" }, { position: 21, - question: 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか', + question: 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか?', answer: "可能です。\n\nフィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\nオンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。" # rubocop:disable Layout/LineLength } ].freeze diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 91060036858..67aa0d3e347 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -1,6 +1,6 @@ faq1: position: 1 - question: 学習を終えるのにどれくらいの時間がかかりますか + question: 学習を終えるのにどれくらいの時間がかかりますか? answer: "\ かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n\ 覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n\ @@ -11,7 +11,7 @@ faq1: faq2: position: 2 - question: 途中で辞めることは可能ですか + question: 途中で辞めることは可能ですか? answer: "\ いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ @@ -20,7 +20,7 @@ faq2: faq3: position: 3 - question: 学習はオンラインだけですか + question: 学習はオンラインだけですか? answer: "\ オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ @@ -28,12 +28,12 @@ faq3: faq4: position: 4 - question: 休会をすることは可能ですか + question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 faq5: position: 5 - question: わからないことがあった場合、質問はできますか + question: わからないことがあった場合、質問はできますか? answer: "\ できます。\n\n\ フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n\ @@ -43,37 +43,37 @@ faq5: faq6: position: 6 - question: 退会した月は料金が日割りで請求されますか + question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 faq7: position: 7 - question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか + question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 faq8: position: 8 - question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか + question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 faq9: position: 9 - question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか + question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 faq10: position: 10 - question: 現在、大学に在学中なのですが、参加できますか + question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 faq11: position: 11 - question: Linuxで学習をしたいのですが可能ですか + question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 faq12: position: 12 - question: Windowsで学習をしたいのですが可能ですか + question: Windowsで学習をしたいのですが可能ですか? answer: "\ Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ @@ -82,22 +82,22 @@ faq12: faq13: position: 13 - question: 古い OS のままで学習をしたいのですが可能ですか + question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 faq14: position: 14 - question: 転職エージェントを使って就職活動をすることは可能ですか + question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 faq15: position: 15 - question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか + question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 faq16: position: 16 - question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか + question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか? answer: "\ 全く問題ありません。\n\n\ フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ @@ -106,7 +106,7 @@ faq16: faq17: position: 17 - question: 30代なのですが、エンジニアとして就職することは可能ですか + question: 30代なのですが、エンジニアとして就職することは可能ですか? answer: "\ 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n\ 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n\ @@ -117,7 +117,7 @@ faq17: faq18: position: 18 - question: 会社の新人研修など法人での利用はできますか + question: 会社の新人研修など法人での利用はできますか? answer: "\ 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ @@ -125,7 +125,7 @@ faq18: faq19: position: 19 - question: 何をしたら卒業になりますか + question: 何をしたら卒業になりますか? answer: "\ 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ @@ -133,7 +133,7 @@ faq19: faq20: position: 20 - question: 利用料の領収書は発行してもらえますか + question: 利用料の領収書は発行してもらえますか? answer: "\ 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ @@ -141,7 +141,7 @@ faq20: faq21: position: 21 - question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか + question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか? answer: "\ 可能です。\n\n\ フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ diff --git a/db/schema.rb b/db/schema.rb index c2e3cf2a193..76f556e366e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -768,7 +768,6 @@ t.string "profile_job" t.text "profile_text" t.string "feed_url" - t.string "times_id", comment: "Snowflake ID" t.boolean "sent_student_followup_message", default: false t.string "country_code" t.string "subdivision_code" From 3b694b82aa2866a4b68521388cfd801df3bb0e7c Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 12:13:56 +0900 Subject: [PATCH 033/101] =?UTF-8?q?FAQ=E3=83=A2=E3=83=87=E3=83=AB=E7=94=A8?= =?UTF-8?q?=E3=81=AElocales=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/ja.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 66dac81678e..5f11e0db229 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -294,6 +294,7 @@ ja: choices: 選択肢 buzz: body: 本文 +<<<<<<< HEAD request_retirement: requester_name: 申請者のアカウント requester_email: 申請者のメールアドレス From ac9ef5d5c3a53f3476a01d0e113dba1f7ce7cc52 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Thu, 13 Jul 2023 18:25:52 +0900 Subject: [PATCH 034/101] =?UTF-8?q?FAQ=E3=81=AE=E7=B7=A8=E9=9B=86=E3=80=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- app/views/admin/faq/edit.html.slim | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index 79a5fff972c..fec1cbf2e0b 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -26,7 +26,7 @@ def edit; end def update if @faq.update(faq_params) - redirect_to admin_faq_path(@faq), notice: 'FAQを更新しました。' + redirect_to admin_faqs_path, notice: 'FAQを更新しました。' else render 'edit' end diff --git a/app/views/admin/faq/edit.html.slim b/app/views/admin/faq/edit.html.slim index 11a6158071f..1aa285ece40 100644 --- a/app/views/admin/faq/edit.html.slim +++ b/app/views/admin/faq/edit.html.slim @@ -3,6 +3,7 @@ header.page-header .container .page-header__inner +<<<<<<< HEAD h1.page-header__title | 管理ページ = render 'admin/admin_page_tabs' @@ -19,10 +20,15 @@ hr.a-border-tint .page-main-header__end .page-header-actions .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQ追加 .page-header-actions__item = link_to admin_faq_path, class: 'a-button is-md is-secondary is-block is-back' do | FAQ一覧 hr.a-border + = render 'admin/admin_page_tabs' .page-body .container.is-xl = render 'form', faq: @faq From fbe7ba8280a6ea1cff8c4d5ee527a1c6195d2470 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 08:38:18 +0900 Subject: [PATCH 035/101] =?UTF-8?q?FAQ=E4=B8=80=E8=A6=A7=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=A7FAQ=E3=81=AE=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/faq_helper.rb | 4 ++++ app/views/admin/faq/_table.html.slim | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/helpers/faq_helper.rb b/app/helpers/faq_helper.rb index 076a11362b8..2c82a9b66ea 100644 --- a/app/helpers/faq_helper.rb +++ b/app/helpers/faq_helper.rb @@ -4,4 +4,8 @@ module FAQHelper def format_question(question) "#{question.delete('??')}?" end + + def question_mark_with(question) + "#{question}?" + end end diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 0d8ea87783a..3af0f810d5c 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -8,10 +8,9 @@ th.admin-table__label 並び順 tbody.admin-table__items#js-faq-sortable - faqs.each do |faq| - tr.admin-table__item(data-faq_id="#{faq.id}") + tr.admin-table__item(id="faq_#{faq.id}") td.admin-table__item-value.is-text-align-center - = link_to admin_faq_path(faq) do - = format_question(faq.question) + = question_mark_with(faq.question) td.admin-table__item-value.is-text-align-center = faq.answer td.admin-table__item-value.is-text-align-center From 0fcf324ce15cd73ec53403d6e86cb7529a1e744d Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 13:43:29 +0900 Subject: [PATCH 036/101] =?UTF-8?q?FAQ=E3=81=AE=E4=BD=9C=E6=88=90=E3=82=92?= =?UTF-8?q?Markdown=E3=81=A7=E8=A1=8C=E3=81=88=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index be983f6badc..a2c30a24f6a 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -2,7 +2,7 @@ .form__items .form-item = f.label :question, class: 'a-form-label' - = f.text_field :question, class: 'a-text-input' + = f.text_area :question, class: 'a-text-input' .form-item .row.js-markdown-parent .col-md-6.col-xs-12 From 46a4f277dd6d6a7cec40863e178cb3945acefaac Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Fri, 14 Jul 2023 16:16:14 +0900 Subject: [PATCH 037/101] =?UTF-8?q?FAQ=E3=81=AE=E8=BF=BD=E5=8A=A0=E3=81=AB?= =?UTF-8?q?=E4=BC=B4=E3=81=86=E6=97=A2=E5=AD=98=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/admin/home_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/system/admin/home_test.rb b/test/system/admin/home_test.rb index 78bcd85784b..dabf6f020ff 100644 --- a/test/system/admin/home_test.rb +++ b/test/system/admin/home_test.rb @@ -7,7 +7,7 @@ class Admin::HomeTest < ApplicationSystemTestCase visit_with_auth '/admin', 'komagata' assert_equal '管理ページ | FBC', title - assert_selector 'a.page-tabs__item-link', count: 6 + assert_selector 'a.page-tabs__item-link', count: 7 assert_selector '.page-tabs__item-link', text: '管理ページ' assert_selector '.page-tabs__item-link', text: 'ユーザー' assert_selector '.page-tabs__item-link', text: '企業' From 2057030e3812efb298abb5cd45906831820ed040 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 10:45:32 +0900 Subject: [PATCH 038/101] =?UTF-8?q?FAQHelper=E3=81=AE=E5=AE=9F=E8=A3=85?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4=E3=81=97=E3=81=A6=E5=B8=B8=E6=99=82?= =?UTF-8?q?=EF=BC=9F=E3=83=9E=E3=83=BC=E3=82=AF=E3=81=8C1=E3=81=A4?= =?UTF-8?q?=E3=81=A0=E3=81=91=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/faq_helper.rb | 4 ---- app/views/admin/faq/_table.html.slim | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/app/helpers/faq_helper.rb b/app/helpers/faq_helper.rb index 2c82a9b66ea..076a11362b8 100644 --- a/app/helpers/faq_helper.rb +++ b/app/helpers/faq_helper.rb @@ -4,8 +4,4 @@ module FAQHelper def format_question(question) "#{question.delete('??')}?" end - - def question_mark_with(question) - "#{question}?" - end end diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 3af0f810d5c..ffd12c3ecc2 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -10,7 +10,7 @@ - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") td.admin-table__item-value.is-text-align-center - = question_mark_with(faq.question) + = format_question(faq.question) td.admin-table__item-value.is-text-align-center = faq.answer td.admin-table__item-value.is-text-align-center From 031df9e67ecf3fac5bf2956e0a8610d7dbdea496 Mon Sep 17 00:00:00 2001 From: yuma-matsui Date: Sun, 16 Jul 2023 16:47:24 +0900 Subject: [PATCH 039/101] =?UTF-8?q?FAQ=E3=81=AE=E8=A9=B3=E7=B4=B0=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E7=94=A8=E6=84=8F=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_table.html.slim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index ffd12c3ecc2..032c7923e20 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -10,7 +10,8 @@ - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") td.admin-table__item-value.is-text-align-center - = format_question(faq.question) + = link_to admin_faq_path(faq) do + = format_question(faq.question) td.admin-table__item-value.is-text-align-center = faq.answer td.admin-table__item-value.is-text-align-center From 712442f918b59febdfea82b35c81bfb1fca778d7 Mon Sep 17 00:00:00 2001 From: machida Date: Wed, 30 Aug 2023 15:11:59 +0900 Subject: [PATCH 040/101] =?UTF-8?q?=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=81=AE=E6=A7=8B=E9=80=A0=E3=82=92=E3=81=96=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E6=A7=8B=E7=AF=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/edit.html.slim | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/views/admin/faq/edit.html.slim b/app/views/admin/faq/edit.html.slim index 1aa285ece40..76e7e5b8e06 100644 --- a/app/views/admin/faq/edit.html.slim +++ b/app/views/admin/faq/edit.html.slim @@ -3,9 +3,14 @@ header.page-header .container .page-header__inner -<<<<<<< HEAD h1.page-header__title | 管理ページ + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQ編集 = render 'admin/admin_page_tabs' hr.a-border-tint @@ -30,5 +35,5 @@ hr.a-border-tint hr.a-border = render 'admin/admin_page_tabs' .page-body - .container.is-xl + .container.is-lg = render 'form', faq: @faq From e77a8c2f88552114a960becd9cdea31cba8f165b Mon Sep 17 00:00:00 2001 From: sochi419 Date: Sun, 11 Feb 2024 16:11:06 +0900 Subject: [PATCH 041/101] =?UTF-8?q?ja.yml=E3=81=AB=E3=82=AB=E3=83=86?= =?UTF-8?q?=E3=82=B4=E3=83=AA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/ja.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 5f11e0db229..a20e55cb044 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -455,3 +455,11 @@ ja: followup: "こんにちは。\nご登録から30日ほど経ちますが、学習について困っていることや詰まっている部分などありますでしょうか?\nもしあれば、メンターの皆さんにお気軽にご相談ください。" comeback: "お帰りなさい!!復会ありがとうございます。\n休会中に何か変わったことがあれば、再びスムーズに学び始めることができるように全力でサポートします。何か困ったことや質問があれば、メンターの皆さんに遠慮なくご相談ください。\n\nまたフィヨルドブートキャンプの Discord のサーバーに入室できるように、再度、Doc にある Discord の招待 URL にアクセスをお願いします。\n" unregistered: 未登録 + faq: + study_content: 学習内容について + study_environment: 学習環境について + fee: 利用料について + find_job: 就職について + join: 入会について + withdrawal_hibernation_graduation: 退会、休会、卒業について + corporate_use: 法人利用について From 648dd45b29f36a70c646eac26b0eae01986a3f1d Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 20 Feb 2024 23:22:31 +0900 Subject: [PATCH 042/101] =?UTF-8?q?=E3=82=AF=E3=82=A8=E3=83=AA=E3=83=91?= =?UTF-8?q?=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF=E3=81=AB=E3=82=AB=E3=83=86?= =?UTF-8?q?=E3=82=B4=E3=83=AA=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 6 +++++- config/locales/ja.yml | 1 + db/migrate/20240220130916_add_category_to_faqs.rb | 5 +++++ db/schema.rb | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20240220130916_add_category_to_faqs.rb diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 54c5197b8ab..197543b4241 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,7 +16,11 @@ def job_support; end def pricing; end def faq - @faqs = FAQ.all + if params[:category].present? + @faqs = FAQ.where(category: params[:category]) + else + @faqs = FAQ.all + end end def training; end diff --git a/config/locales/ja.yml b/config/locales/ja.yml index a20e55cb044..0bae834b2a5 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -456,6 +456,7 @@ ja: comeback: "お帰りなさい!!復会ありがとうございます。\n休会中に何か変わったことがあれば、再びスムーズに学び始めることができるように全力でサポートします。何か困ったことや質問があれば、メンターの皆さんに遠慮なくご相談ください。\n\nまたフィヨルドブートキャンプの Discord のサーバーに入室できるように、再度、Doc にある Discord の招待 URL にアクセスをお願いします。\n" unregistered: 未登録 faq: + all: 全て study_content: 学習内容について study_environment: 学習環境について fee: 利用料について diff --git a/db/migrate/20240220130916_add_category_to_faqs.rb b/db/migrate/20240220130916_add_category_to_faqs.rb new file mode 100644 index 00000000000..f320726b014 --- /dev/null +++ b/db/migrate/20240220130916_add_category_to_faqs.rb @@ -0,0 +1,5 @@ +class AddCategoryToFaqs < ActiveRecord::Migration[6.1] + def change + add_column :faqs, :category, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 76f556e366e..135ef66ec41 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -273,6 +273,7 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" + t.string "category" t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true t.index ["question"], name: "index_faqs_on_question", unique: true end From f5bba8bd9d8afbfe997fe30bf71ee76c7a0ed4c9 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 27 Feb 2024 10:58:53 +0900 Subject: [PATCH 043/101] =?UTF-8?q?admin=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=AEfaq=E3=81=AEradio=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92?= =?UTF-8?q?=E5=AE=9F=E8=A3=85=EF=BC=88=E4=BB=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_table.html.slim | 10 ++++++++++ ...3_remove_unique_constraint_from_category_in_faqs.rb | 5 +++++ 2 files changed, 15 insertions(+) create mode 100644 db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 032c7923e20..babadd50c8f 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -6,6 +6,7 @@ th.admin-table__label 回答 th.admin-table__label 編集 th.admin-table__label 並び順 + th.admin-table__label カテゴリ tbody.admin-table__items#js-faq-sortable - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") @@ -20,3 +21,12 @@ td.admin-table__item-value.is-text-align-center.is-grab span.js-grab.a-grab i.fa-solid.fa-align-justify + td.admin-table__item-value.is-text-align-center + ul.block-checks.sm-down:is-3-items + - %w[学習内容について 学習環境について 利用料について 就職について 入会について 退会、休会、卒業について 法人利用について].each do |category| + li.block-checks__item + .a-block-check.is-radio + = radio_button "faq_#{faq.id}_category", 'category', value: category, class: 'a-toggle-checkbox' + = label :category, value: category, class: 'a-block-check__label' + span.a-block-check__name + = category diff --git a/db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb b/db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb new file mode 100644 index 00000000000..d92e58c3d93 --- /dev/null +++ b/db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb @@ -0,0 +1,5 @@ +class RemoveUniqueConstraintFromCategoryInFaqs < ActiveRecord::Migration[6.1] + def change + remove_index :faqs, name: "index_faqs_on_category" + end +end From 23de8ca87fcc3a2ba76597dcd5a51d5c3ac394df Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 27 Feb 2024 22:32:52 +0900 Subject: [PATCH 044/101] =?UTF-8?q?form=E3=83=98=E3=83=AB=E3=83=91?= =?UTF-8?q?=E3=83=BC=E3=82=92=E7=94=A8=E3=81=84=E3=81=9Fradio=E3=83=9C?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_table.html.slim | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index babadd50c8f..fd589c5f87b 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -22,11 +22,19 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - ul.block-checks.sm-down:is-3-items - - %w[学習内容について 学習環境について 利用料について 就職について 入会について 退会、休会、卒業について 法人利用について].each do |category| - li.block-checks__item - .a-block-check.is-radio - = radio_button "faq_#{faq.id}_category", 'category', value: category, class: 'a-toggle-checkbox' - = label :category, value: category, class: 'a-block-check__label' - span.a-block-check__name - = category + = form_with model: faq, local: true do |f| + = render 'errors', object: faq + = f.radio_button :category, :study_content + = f.label :category, "学習内容について", {value: :study_content} + = f.radio_button :category, :study_environment + = f.label :category, "学習環境について", {value: :study_environment} + = f.radio_button :category, :fee + = f.label :category, "利用料について", {value: :fee} + = f.radio_button :category, :find_job + = f.label :category, "就職について", {value: :find_job} + = f.radio_button :category, :join + = f.label :category, "入会について", {value: :join} + = f.radio_button :category, :withdrawal_hibernation_graduation + = f.label :category, "退会、休会、卒業について", {value: :withdrawal_hibernation_graduation} + = f.radio_button :category, :corporate_use + = f.label :category, "法人利用について", {value: :corporate_use} From 9fafb73656d57c7b537984d58cf173138075a173 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 28 Feb 2024 10:20:20 +0900 Subject: [PATCH 045/101] =?UTF-8?q?=E7=B7=A8=E9=9B=86=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E3=80=81=E6=96=B0=E8=A6=8F=E4=BD=9C=E6=88=90=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA=E9=81=B8?= =?UTF-8?q?=E6=8A=9E=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- app/views/admin/faq/_form.html.slim | 16 ++++++++++++++++ app/views/admin/faq/_table.html.slim | 17 +---------------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index fec1cbf2e0b..734140df065 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -40,7 +40,7 @@ def destroy private def faq_params - params.require(:faq).permit(:answer, :question) + params.require(:faq).permit(:answer, :question, :category) end def set_faq diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index a2c30a24f6a..9c5b9aac8c5 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -14,6 +14,22 @@ .a-form-label | プレビュー .js-preview.a-long-text.is-md.markdown-form__preview + .form-item + = render 'errors', object: faq + = f.radio_button :category, :study_content + = f.label :category, "学習内容について", {value: :study_content} + = f.radio_button :category, :study_environment + = f.label :category, "学習環境について", {value: :study_environment} + = f.radio_button :category, :fee + = f.label :category, "利用料について", {value: :fee} + = f.radio_button :category, :find_job + = f.label :category, "就職について", {value: :find_job} + = f.radio_button :category, :join + = f.label :category, "入会について", {value: :join} + = f.radio_button :category, :withdrawal_hibernation_graduation + = f.label :category, "退会、休会、卒業について", {value: :withdrawal_hibernation_graduation} + = f.radio_button :category, :corporate_use + = f.label :category, "法人利用について", {value: :corporate_use} .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index fd589c5f87b..7b6aee67716 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -22,19 +22,4 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - = form_with model: faq, local: true do |f| - = render 'errors', object: faq - = f.radio_button :category, :study_content - = f.label :category, "学習内容について", {value: :study_content} - = f.radio_button :category, :study_environment - = f.label :category, "学習環境について", {value: :study_environment} - = f.radio_button :category, :fee - = f.label :category, "利用料について", {value: :fee} - = f.radio_button :category, :find_job - = f.label :category, "就職について", {value: :find_job} - = f.radio_button :category, :join - = f.label :category, "入会について", {value: :join} - = f.radio_button :category, :withdrawal_hibernation_graduation - = f.label :category, "退会、休会、卒業について", {value: :withdrawal_hibernation_graduation} - = f.radio_button :category, :corporate_use - = f.label :category, "法人利用について", {value: :corporate_use} + = faq.category From 956bc038bd445869bfd5856cd499a60f8e6f0e1a Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 28 Feb 2024 11:07:00 +0900 Subject: [PATCH 046/101] =?UTF-8?q?ja.yml=E3=81=AB=E8=A8=98=E8=BC=89?= =?UTF-8?q?=E3=81=97=E3=81=9F=E6=96=87=E5=AD=97=E3=82=92=E4=BD=BF=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E5=87=A6=E7=90=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 14 +++++++------- app/views/admin/faq/_table.html.slim | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 9c5b9aac8c5..2cff2058b28 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -17,19 +17,19 @@ .form-item = render 'errors', object: faq = f.radio_button :category, :study_content - = f.label :category, "学習内容について", {value: :study_content} + = f.label :category, t("faq.study_content"), {value: :study_content} = f.radio_button :category, :study_environment - = f.label :category, "学習環境について", {value: :study_environment} + = f.label :category, t("faq.study_environment"), {value: :study_environment} = f.radio_button :category, :fee - = f.label :category, "利用料について", {value: :fee} + = f.label :category, t("faq.fee"), {value: :fee} = f.radio_button :category, :find_job - = f.label :category, "就職について", {value: :find_job} + = f.label :category, t("faq.find_job"), {value: :find_job} = f.radio_button :category, :join - = f.label :category, "入会について", {value: :join} + = f.label :category, t("faq.join"), {value: :join} = f.radio_button :category, :withdrawal_hibernation_graduation - = f.label :category, "退会、休会、卒業について", {value: :withdrawal_hibernation_graduation} + = f.label :category, t("faq.withdrawal_hibernation_graduation"), {value: :withdrawal_hibernation_graduation} = f.radio_button :category, :corporate_use - = f.label :category, "法人利用について", {value: :corporate_use} + = f.label :category, t("faq.corporate_use"), {value: :corporate_use} .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 7b6aee67716..ec5e2b3d615 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -22,4 +22,4 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - = faq.category + = t("faq.#{faq.category}") From 3c02730cc82029288458b4c5ed0b656e48dfc007 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 28 Feb 2024 11:11:31 +0900 Subject: [PATCH 047/101] =?UTF-8?q?faq=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=81=AEcategory=E3=81=ABnot=20null=E5=88=B6=E7=B4=84=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0228020835_add_not_null_constraint_to_category_in_faqs.rb | 5 +++++ db/schema.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb diff --git a/db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb b/db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb new file mode 100644 index 00000000000..acc923a3a5c --- /dev/null +++ b/db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb @@ -0,0 +1,5 @@ +class AddNotNullConstraintToCategoryInFaqs < ActiveRecord::Migration[6.1] + def change + change_column_null :faqs, :category, false + end +end diff --git a/db/schema.rb b/db/schema.rb index 135ef66ec41..903c610d71a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -273,7 +273,7 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.string "category" + t.string "category", null: false t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true t.index ["question"], name: "index_faqs_on_question", unique: true end From 24a6530c9dfc34241bba06dc0ca93a055c1a8935 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 28 Feb 2024 11:52:03 +0900 Subject: [PATCH 048/101] =?UTF-8?q?category=E6=9C=AA=E9=81=B8=E6=8A=9E?= =?UTF-8?q?=E6=99=82=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=81=AE=E3=81=9F=E3=82=81=E3=80=81Faqmodel=E3=81=ABvalidate?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/faq.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/faq.rb b/app/models/faq.rb index a3f6c2ff0f9..2c6cec8bafe 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -3,6 +3,7 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true + validates :category, presence: true default_scope -> { order(:position) } acts_as_list From 026593667cb6f23a409e36ebe06899af97f5204d Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 4 Mar 2024 06:53:39 +0900 Subject: [PATCH 049/101] =?UTF-8?q?seed=E3=81=AE=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E4=BF=AE=E6=AD=A3=E3=80=81=E3=82=AB=E3=83=86=E3=82=B4?= =?UTF-8?q?=E3=83=AA=E3=82=BF=E3=83=96=E3=82=92render=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=99=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/welcome/_faq_tabs.html.slim | 26 ++++++++++++++++ db/fixtures/faqs.yml | 43 ++++++++++++++++++++------- 2 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 app/views/welcome/_faq_tabs.html.slim diff --git a/app/views/welcome/_faq_tabs.html.slim b/app/views/welcome/_faq_tabs.html.slim new file mode 100644 index 00000000000..d630a8eee2a --- /dev/null +++ b/app/views/welcome/_faq_tabs.html.slim @@ -0,0 +1,26 @@ +.page-tabs + .container + ul.page-tabs__items + li.page-tabs__item + = link_to '全て', faq_path + li.page-tabs__item + = link_to '学習内容について', + faq_path(category: 'study_content') + li.page-tabs__item + = link_to '学習環境について', + faq_path(category: 'study_environment') + li.page-tabs__item + = link_to '利用料について', + faq_path(category: 'fee') + li.page-tabs__item + = link_to '就職について', + faq_path(category: 'find_job') + li.page-tabs__item + = link_to '入会について', + faq_path(category: 'join') + li.page-tabs__item + = link_to '退会、休会、卒業について', + faq_path(category: 'withdrawal_hibernation_graduation') + li.page-tabs__item + = link_to '法人利用について', + faq_path(category: 'corporate_use') diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 67aa0d3e347..ed28048be2c 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -7,7 +7,8 @@ faq1: 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\n\ フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ - " + " + category: study_environment faq2: position: 2 @@ -16,7 +17,8 @@ faq2: いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ - " + " + category: withdrawal_hibernation_graduation faq3: position: 3 @@ -24,12 +26,14 @@ faq3: answer: "\ オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ - " + " + category: study_environment faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 + category: withdrawal_hibernation_graduation faq5: position: 5 @@ -39,37 +43,44 @@ faq5: フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n\ 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ - " + " + category: study_environment faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 + category: fee faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 + category: study_environment faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 + category: join faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 + category: join faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 + category: join faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 + category: faq12: position: 12 @@ -78,22 +89,26 @@ faq12: Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ - " + " + category: study_environment faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 + category: study_environment faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 + category: find_job faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 + category: find_job faq16: position: 16 @@ -102,7 +117,8 @@ faq16: 全く問題ありません。\n\n\ フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ - " + " + category: join faq17: position: 17 @@ -113,7 +129,8 @@ faq17: 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n\ 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ - " + " + category: study_environment faq18: position: 18 @@ -121,7 +138,8 @@ faq18: answer: "\ 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ - " + " + category: corporate_use faq19: position: 19 @@ -129,7 +147,8 @@ faq19: answer: "\ 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ - " + " + category: withdrawal_hibernation_graduation faq20: position: 20 @@ -137,7 +156,8 @@ faq20: answer: "\ 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ - " + " + category: fee faq21: position: 21 @@ -146,4 +166,5 @@ faq21: 可能です。\n\n\ フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ - " + " + category: study_environment From 3a8ba098609cbd932e7062ac0322f570f198bbed Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 11:26:46 +0900 Subject: [PATCH 050/101] =?UTF-8?q?rubocop=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 197543b4241..9abfe4618b3 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,11 +16,11 @@ def job_support; end def pricing; end def faq - if params[:category].present? - @faqs = FAQ.where(category: params[:category]) - else - @faqs = FAQ.all - end + @faqs = if params[:category].present? + FAQ.where(category: params[:category]) + else + FAQ.all + end end def training; end From 334caab46e660cfae3bfd3341ba5c0a7b7c4e2cf Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 11:50:08 +0900 Subject: [PATCH 051/101] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AE?= =?UTF-8?q?=E5=86=97=E9=95=B7=E9=83=A8=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 2cff2058b28..074f737ee07 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -16,20 +16,9 @@ .js-preview.a-long-text.is-md.markdown-form__preview .form-item = render 'errors', object: faq - = f.radio_button :category, :study_content - = f.label :category, t("faq.study_content"), {value: :study_content} - = f.radio_button :category, :study_environment - = f.label :category, t("faq.study_environment"), {value: :study_environment} - = f.radio_button :category, :fee - = f.label :category, t("faq.fee"), {value: :fee} - = f.radio_button :category, :find_job - = f.label :category, t("faq.find_job"), {value: :find_job} - = f.radio_button :category, :join - = f.label :category, t("faq.join"), {value: :join} - = f.radio_button :category, :withdrawal_hibernation_graduation - = f.label :category, t("faq.withdrawal_hibernation_graduation"), {value: :withdrawal_hibernation_graduation} - = f.radio_button :category, :corporate_use - = f.label :category, t("faq.corporate_use"), {value: :corporate_use} + - [:study_content, :study_environment, :fee, :find_job, :join, :withdrawal_hibernation_graduation, :corporate_use].each do |category| + = f.radio_button :category, category + = f.label :category, t("faq.#{category}"), value: category .form-actions ul.form-actions__items li.form-actions__item.is-main From c61156c2c1a4f1c38935a6a3e0e20edc9a61b47a Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 11:56:11 +0900 Subject: [PATCH 052/101] =?UTF-8?q?rubocop=E9=81=95=E5=8F=8D=E3=82=92?= =?UTF-8?q?=E5=86=8D=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 074f737ee07..c7acba126d4 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -16,7 +16,7 @@ .js-preview.a-long-text.is-md.markdown-form__preview .form-item = render 'errors', object: faq - - [:study_content, :study_environment, :fee, :find_job, :join, :withdrawal_hibernation_graduation, :corporate_use].each do |category| + - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| = f.radio_button :category, category = f.label :category, t("faq.#{category}"), value: category .form-actions From aca203cef7a8d867861fa7cae32534c72807a774 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 15:55:10 +0900 Subject: [PATCH 053/101] =?UTF-8?q?seed=E3=81=ABtypo=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/fixtures/faqs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index ed28048be2c..34db2dee600 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -80,7 +80,7 @@ faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - category: + category: study_environment faq12: position: 12 From 50e80441d7d75fa0a79b3778609cf5657aaf170e Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 16:10:38 +0900 Subject: [PATCH 054/101] =?UTF-8?q?test/fixtures/faqs.yml=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AB=E3=80=81=E3=82=AB=E3=83=86?= =?UTF-8?q?=E3=82=B4=E3=83=AA=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/fixtures/faqs.yml | 43 +++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 91060036858..01b0a0bf16b 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -7,7 +7,8 @@ faq1: 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。\n\n\ フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ - " + " + category: study_environment faq2: position: 2 @@ -16,7 +17,8 @@ faq2: いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ - " + " + category: withdrawal_hibernation_graduation faq3: position: 3 @@ -24,12 +26,14 @@ faq3: answer: "\ オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ - " + " + category: study_environment faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 + category: withdrawal_hibernation_graduation faq5: position: 5 @@ -39,37 +43,44 @@ faq5: フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n\ 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ - " + " + category: study_environment faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 + category: fee faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 + category: study_environment faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 + category: join faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 + category: join faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 + category: join faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 + category: study_environment faq12: position: 12 @@ -78,22 +89,26 @@ faq12: Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ - " + " + category: study_environment faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 + category: study_environment faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 + category: find_job faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 + category: find_job faq16: position: 16 @@ -102,7 +117,8 @@ faq16: 全く問題ありません。\n\n\ フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ - " + " + category: join faq17: position: 17 @@ -113,7 +129,8 @@ faq17: 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、就職をするためにはそれ以外の要素も必要ですが、30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、高いコミュニケーション能力を求められる傾向にあります。\n\n\ 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ - " + " + category: study_environment faq18: position: 18 @@ -121,7 +138,8 @@ faq18: answer: "\ 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ - " + " + category: corporate_use faq19: position: 19 @@ -129,7 +147,8 @@ faq19: answer: "\ 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ - " + " + category: withdrawal_hibernation_graduation faq20: position: 20 @@ -137,7 +156,8 @@ faq20: answer: "\ 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ - " + " + category: fee faq21: position: 21 @@ -146,4 +166,5 @@ faq21: 可能です。\n\n\ フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ - " + " + category: study_environment From 2d43d822f51c32c737aa68a70f1bb38ba84b0fd7 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 18:17:28 +0900 Subject: [PATCH 055/101] =?UTF-8?q?=E6=97=A2=E5=AD=98=E3=81=AEyuma?= =?UTF-8?q?=E3=81=95=E3=82=93=E3=81=8C=E5=AE=9F=E8=A3=85=E3=81=97=E3=81=9F?= =?UTF-8?q?faq=E9=96=A2=E9=80=A3=E3=81=AEtest=E3=81=8C=E8=90=BD=E3=81=A1?= =?UTF-8?q?=E3=81=A6=E3=81=97=E3=81=BE=E3=81=86=E5=95=8F=E9=A1=8C=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 2 ++ test/models/faq_test.rb | 5 +++++ test/system/admin/faq_test.rb | 2 ++ 3 files changed, 9 insertions(+) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index c7acba126d4..a057e644f74 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -16,6 +16,8 @@ .js-preview.a-long-text.is-md.markdown-form__preview .form-item = render 'errors', object: faq + label.a-form-label + | カテゴリー - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| = f.radio_button :category, category = f.label :category, t("faq.#{category}"), value: category diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index 965d2e6e81f..6c148a1885a 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -21,6 +21,11 @@ class FaqTest < ActiveSupport::TestCase assert @faq1.invalid? end + test 'faq1 is invalid if category is null' do + @faq1.category = nil + assert @faq1.invalid? + end + test 'new faq is invalid if question has already existed' do new_faq = faqs(:faq2) new_faq.question = @faq1.question diff --git a/test/system/admin/faq_test.rb b/test/system/admin/faq_test.rb index 4b41365d41b..2b015fda000 100644 --- a/test/system/admin/faq_test.rb +++ b/test/system/admin/faq_test.rb @@ -13,6 +13,7 @@ class Admin::FAQTest < ApplicationSystemTestCase within 'form[name=faq]' do fill_in 'faq[question]', with: 'test FAQ' fill_in 'faq[answer]', with: 'test FAQ' + choose 'faq_category_study_content' click_button '登録する' end assert_text 'FAQを作成しました。' @@ -23,6 +24,7 @@ class Admin::FAQTest < ApplicationSystemTestCase within 'form[name=faq]' do fill_in 'faq[question]', with: 'updated FAQ' fill_in 'faq[answer]', with: 'updated FAQ' + choose 'faq_category_study_content' click_button '更新する' end assert_text 'FAQを更新しました。' From dbacd474b9785df4d38ccda4a04992e8abf3e8b3 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 19:05:21 +0900 Subject: [PATCH 056/101] =?UTF-8?q?faq=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=A7?= =?UTF-8?q?=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA=E6=AF=8E=E3=81=ABfaq?= =?UTF-8?q?=E3=82=92=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B=E7=A2=BA=E8=AA=8D?= =?UTF-8?q?=E3=81=AEtest=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/faq_test.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index c232170cdb3..a7c059b784e 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -7,4 +7,9 @@ class FAQTest < ApplicationSystemTestCase visit faq_path assert_selector '.faqs-item', count: FAQ.all.size end + + test 'show listing FAQs by category' do + visit '/faq?category=study_environment' + assert_selector '.faqs-item', count: FAQ.where(category: 'study_environment').size + end end From 1577fa1bb1a6cb8cf6662861ee7f11d921e02eef Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 5 Mar 2024 20:34:57 +0900 Subject: [PATCH 057/101] =?UTF-8?q?admin/faq=E3=81=AE=E5=80=8B=E5=88=A5?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AB=E3=82=AB=E3=83=86=E3=82=B4?= =?UTF-8?q?=E3=83=AA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/show.html.slim | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index 550d9270a73..6cfdcdbfcce 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -47,6 +47,13 @@ main.page-main .a-meta | #{l @faq.created_at} 公開 + .page-content-header__row + .page-content-header-metas + .page-content-header-metas__start + .page-content-header-metas__meta + .a-meta + = t("faq.#{@faq.category}") + .a-card .card-body .card__description From db54741d2a26baca2ded91712fe22f23a1fe3381 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 25 Mar 2024 09:49:13 +0900 Subject: [PATCH 058/101] =?UTF-8?q?faqs=5Fcategory=E3=83=86=E3=83=BC?= =?UTF-8?q?=E3=83=96=E3=83=AB=E3=82=92=E4=BD=9C=E6=88=90,=20faq=E3=83=86?= =?UTF-8?q?=E3=83=BC=E3=83=96=E3=83=AB=E3=81=AB=E3=81=82=E3=81=A3=E3=81=9F?= =?UTF-8?q?category=E3=81=AEcalumn=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 3 +- app/models/faq.rb | 2 +- app/models/faqs_category.rb | 5 +++ db/fixtures/faqs.yml | 42 +++++++++---------- db/fixtures/faqs_categories.yml | 20 +++++++++ .../20240220130916_add_category_to_faqs.rb | 5 --- ...unique_constraint_from_category_in_faqs.rb | 5 --- ...not_null_constraint_to_category_in_faqs.rb | 5 --- .../20240313020054_create_faqs_categories.rb | 9 ++++ .../20240313025400_add_foreign_key_to_faqs.rb | 5 +++ db/schema.rb | 10 ++++- db/seeds.rb | 1 + 12 files changed, 73 insertions(+), 39 deletions(-) create mode 100644 app/models/faqs_category.rb create mode 100644 db/fixtures/faqs_categories.yml delete mode 100644 db/migrate/20240220130916_add_category_to_faqs.rb delete mode 100644 db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb delete mode 100644 db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb create mode 100644 db/migrate/20240313020054_create_faqs_categories.rb create mode 100644 db/migrate/20240313025400_add_foreign_key_to_faqs.rb diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 9abfe4618b3..d5dc3656540 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -17,7 +17,8 @@ def pricing; end def faq @faqs = if params[:category].present? - FAQ.where(category: params[:category]) + category = FaqsCategory.find_by(name: params[:category]) + FAQ.where(faqs_categories_id: category.id) if category.present? else FAQ.all end diff --git a/app/models/faq.rb b/app/models/faq.rb index 2c6cec8bafe..987b49afa4b 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -3,8 +3,8 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true - validates :category, presence: true default_scope -> { order(:position) } + belongs_to :faqs_categories acts_as_list end diff --git a/app/models/faqs_category.rb b/app/models/faqs_category.rb new file mode 100644 index 00000000000..a6ceb5a1f6d --- /dev/null +++ b/app/models/faqs_category.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class FaqsCategory < ApplicationRecord + has_many :faqs, dependent: :destroy +end diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 34db2dee600..756dee83c15 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - category: study_environment + faqs_categories: faqs_categories2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - category: withdrawal_hibernation_graduation + faqs_categories: faqs_categories6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - category: study_environment + faqs_categories: faqs_categories2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - category: withdrawal_hibernation_graduation + faqs_categories: faqs_categories6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - category: study_environment + faqs_categories: faqs_categories2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - category: fee + faqs_categories: faqs_categories3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - category: study_environment + faqs_categories: faqs_categories2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - category: join + faqs_categories: faqs_categories5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - category: join + faqs_categories: faqs_categories5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - category: join + faqs_categories: faqs_categories5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - category: study_environment + faqs_categories: faqs_categories2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - category: study_environment + faqs_categories: faqs_categories2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - category: study_environment + faqs_categories: faqs_categories2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - category: find_job + faqs_categories: faqs_categories4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - category: find_job + faqs_categories: faqs_categories4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - category: join + faqs_categories: faqs_categories5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - category: study_environment + faqs_categories: faqs_categories2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - category: corporate_use + faqs_categories: faqs_categories7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - category: withdrawal_hibernation_graduation + faqs_categories: faqs_categories6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - category: fee + faqs_categories: faqs_categories3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - category: study_environment + faqs_categories: faqs_categories2 diff --git a/db/fixtures/faqs_categories.yml b/db/fixtures/faqs_categories.yml new file mode 100644 index 00000000000..eef65b5a901 --- /dev/null +++ b/db/fixtures/faqs_categories.yml @@ -0,0 +1,20 @@ +faqs_categories1: + name: study_content + +faqs_categories2: + name: study_environment + +faqs_categories3: + name: fee + +faqs_categories4: + name: find_job + +faqs_categories5: + name: join + +faqs_categories6: + name: withdrawal_hibernation_graduation + +faqs_categories7: + name: corporate_use diff --git a/db/migrate/20240220130916_add_category_to_faqs.rb b/db/migrate/20240220130916_add_category_to_faqs.rb deleted file mode 100644 index f320726b014..00000000000 --- a/db/migrate/20240220130916_add_category_to_faqs.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddCategoryToFaqs < ActiveRecord::Migration[6.1] - def change - add_column :faqs, :category, :string - end -end diff --git a/db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb b/db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb deleted file mode 100644 index d92e58c3d93..00000000000 --- a/db/migrate/20240221034743_remove_unique_constraint_from_category_in_faqs.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RemoveUniqueConstraintFromCategoryInFaqs < ActiveRecord::Migration[6.1] - def change - remove_index :faqs, name: "index_faqs_on_category" - end -end diff --git a/db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb b/db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb deleted file mode 100644 index acc923a3a5c..00000000000 --- a/db/migrate/20240228020835_add_not_null_constraint_to_category_in_faqs.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddNotNullConstraintToCategoryInFaqs < ActiveRecord::Migration[6.1] - def change - change_column_null :faqs, :category, false - end -end diff --git a/db/migrate/20240313020054_create_faqs_categories.rb b/db/migrate/20240313020054_create_faqs_categories.rb new file mode 100644 index 00000000000..541c1f76e54 --- /dev/null +++ b/db/migrate/20240313020054_create_faqs_categories.rb @@ -0,0 +1,9 @@ +class CreateFaqsCategories < ActiveRecord::Migration[6.1] + def change + create_table :faqs_categories do |t| + t.string :name + + t.timestamps + end + end +end diff --git a/db/migrate/20240313025400_add_foreign_key_to_faqs.rb b/db/migrate/20240313025400_add_foreign_key_to_faqs.rb new file mode 100644 index 00000000000..2470431f475 --- /dev/null +++ b/db/migrate/20240313025400_add_foreign_key_to_faqs.rb @@ -0,0 +1,5 @@ +class AddForeignKeyToFaqs < ActiveRecord::Migration[6.1] + def change + add_reference :faqs, :faqs_categories, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 903c610d71a..75cb68c7f7c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -273,11 +273,18 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.string "category", null: false + t.bigint "faqs_categories_id" t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true + t.index ["faqs_categories_id"], name: "index_faqs_on_faqs_categories_id" t.index ["question"], name: "index_faqs_on_question", unique: true end + create_table "faqs_categories", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + create_table "followings", force: :cascade do |t| t.integer "follower_id" t.integer "followed_id" @@ -820,6 +827,7 @@ add_foreign_key "check_boxes", "survey_questions" add_foreign_key "discord_profiles", "users" add_foreign_key "external_entries", "users" + add_foreign_key "faqs", "faqs_categories", column: "faqs_categories_id" add_foreign_key "hibernations", "users" add_foreign_key "images", "users" add_foreign_key "learning_minute_statistics", "practices" diff --git a/db/seeds.rb b/db/seeds.rb index 93f339af5f4..f5e0688cf83 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -26,6 +26,7 @@ events external_entries faqs + faqs_categories followings reports learning_times From a45336423a53bbc5196a04c93d34c331ede36d24 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 27 Mar 2024 03:42:24 +0900 Subject: [PATCH 059/101] =?UTF-8?q?DB=E6=A7=8B=E9=80=A0=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=AB=E4=BC=B4=E3=81=84=E3=80=81model,=20controlle?= =?UTF-8?q?r,=20views=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 4 ++-- app/controllers/welcome_controller.rb | 2 +- app/helpers/faq_helper.rb | 2 +- app/models/{faqs_category.rb => faqs_categories.rb} | 2 +- app/views/admin/faq/_form.html.slim | 4 ++-- app/views/admin/faq/_table.html.slim | 2 +- app/views/admin/faq/show.html.slim | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename app/models/{faqs_category.rb => faqs_categories.rb} (64%) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index 734140df065..2ee0f70e6fe 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class Admin::FAQController < AdminController +class Admin::FaqController < AdminController before_action :set_faq, only: %i[show edit update destroy] def index @faqs = FAQ.all @@ -40,7 +40,7 @@ def destroy private def faq_params - params.require(:faq).permit(:answer, :question, :category) + params.require(:faq).permit(:answer, :question, :faqs_categories_id) end def set_faq diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index d5dc3656540..5a4c8b0e66b 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,8 +16,8 @@ def job_support; end def pricing; end def faq + category = FaqsCategories.find_by(name: params[:category]) @faqs = if params[:category].present? - category = FaqsCategory.find_by(name: params[:category]) FAQ.where(faqs_categories_id: category.id) if category.present? else FAQ.all diff --git a/app/helpers/faq_helper.rb b/app/helpers/faq_helper.rb index 076a11362b8..ea1e62d3612 100644 --- a/app/helpers/faq_helper.rb +++ b/app/helpers/faq_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module FAQHelper +module FaqHelper def format_question(question) "#{question.delete('??')}?" end diff --git a/app/models/faqs_category.rb b/app/models/faqs_categories.rb similarity index 64% rename from app/models/faqs_category.rb rename to app/models/faqs_categories.rb index a6ceb5a1f6d..e7cf80dbae8 100644 --- a/app/models/faqs_category.rb +++ b/app/models/faqs_categories.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -class FaqsCategory < ApplicationRecord +class FaqsCategories < ApplicationRecord has_many :faqs, dependent: :destroy end diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index a057e644f74..12eab101216 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -19,8 +19,8 @@ label.a-form-label | カテゴリー - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| - = f.radio_button :category, category - = f.label :category, t("faq.#{category}"), value: category + = f.radio_button :faqs_categories_id, FaqsCategories.find_by(name: "#{category}").id + = f.label :faqs_categories_id, t("faq.#{category}"), value: FaqsCategories.find_by(name: "#{category}").id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index ec5e2b3d615..51d663843f1 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -22,4 +22,4 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - = t("faq.#{faq.category}") + = t("faq.#{FaqsCategories.find_by(id: faq.faqs_categories_id).name}") diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index 6cfdcdbfcce..a3e9e8d474d 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -52,7 +52,7 @@ main.page-main .page-content-header-metas__start .page-content-header-metas__meta .a-meta - = t("faq.#{@faq.category}") + = t("faq.#{FaqsCategories.find_by(id: @faq.faqs_categories_id).name}") .a-card .card-body From 891c0fb09bc82ad9865f909f103522e83a6da31f Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 27 Mar 2024 04:13:49 +0900 Subject: [PATCH 060/101] =?UTF-8?q?test/fixtures/faqs.yml=E3=81=AE?= =?UTF-8?q?=E8=A8=98=E8=BF=B0=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/fixtures/faqs.yml | 42 +++++++++++++++---------------- test/fixtures/faqs_categories.yml | 20 +++++++++++++++ 2 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 test/fixtures/faqs_categories.yml diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 01b0a0bf16b..889586fff83 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - category: study_environment + faqs_categories: faqs_categories2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - category: withdrawal_hibernation_graduation + faqs_categories: faqs_categories6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - category: study_environment + faqs_categories: faqs_categories2 faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 - category: withdrawal_hibernation_graduation + faqs_categories: faqs_categories6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - category: study_environment + faqs_categories: faqs_categories2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - category: fee + faqs_categories: faqs_categories3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - category: study_environment + faqs_categories: faqs_categories2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - category: join + faqs_categories: faqs_categories5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - category: join + faqs_categories: faqs_categories5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 - category: join + faqs_categories: faqs_categories5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - category: study_environment + faqs_categories: faqs_categories2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - category: study_environment + faqs_categories: faqs_categories2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - category: study_environment + faqs_categories: faqs_categories2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - category: find_job + faqs_categories: faqs_categories4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - category: find_job + faqs_categories: faqs_categories4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - category: join + faqs_categories: faqs_categories5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - category: study_environment + faqs_categories: faqs_categories2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - category: corporate_use + faqs_categories: faqs_categories7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - category: withdrawal_hibernation_graduation + faqs_categories: faqs_categories6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - category: fee + faqs_categories: faqs_categories3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - category: study_environment + faqs_categories: faqs_categories2 diff --git a/test/fixtures/faqs_categories.yml b/test/fixtures/faqs_categories.yml new file mode 100644 index 00000000000..eef65b5a901 --- /dev/null +++ b/test/fixtures/faqs_categories.yml @@ -0,0 +1,20 @@ +faqs_categories1: + name: study_content + +faqs_categories2: + name: study_environment + +faqs_categories3: + name: fee + +faqs_categories4: + name: find_job + +faqs_categories5: + name: join + +faqs_categories6: + name: withdrawal_hibernation_graduation + +faqs_categories7: + name: corporate_use From 20a5bf588502980e6ccfd8763e33e96c1263828c Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 27 Mar 2024 04:56:53 +0900 Subject: [PATCH 061/101] =?UTF-8?q?Zeitwork::NameError=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- app/helpers/faq_helper.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index 2ee0f70e6fe..e5ebe4e8c44 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class Admin::FaqController < AdminController +class Admin::FAQController < AdminController before_action :set_faq, only: %i[show edit update destroy] def index @faqs = FAQ.all diff --git a/app/helpers/faq_helper.rb b/app/helpers/faq_helper.rb index ea1e62d3612..076a11362b8 100644 --- a/app/helpers/faq_helper.rb +++ b/app/helpers/faq_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module FaqHelper +module FAQHelper def format_question(question) "#{question.delete('??')}?" end From 6a7425a0fd165b99e3c8b40c1c6a107169953ed6 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 27 Mar 2024 12:12:26 +0900 Subject: [PATCH 062/101] =?UTF-8?q?yml=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AB=E6=99=82=E9=96=93=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=80=81=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE=E4=B8=80?= =?UTF-8?q?=E9=83=A8=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/fixtures/faqs_categories.yml | 14 ++++++++++++++ test/fixtures/faqs_categories.yml | 14 ++++++++++++++ test/system/faq_test.rb | 4 +++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/db/fixtures/faqs_categories.yml b/db/fixtures/faqs_categories.yml index eef65b5a901..9674a53e0ce 100644 --- a/db/fixtures/faqs_categories.yml +++ b/db/fixtures/faqs_categories.yml @@ -1,20 +1,34 @@ faqs_categories1: name: study_content + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories2: name: study_environment + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories3: name: fee + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories4: name: find_job + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories5: name: join + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories6: name: withdrawal_hibernation_graduation + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories7: name: corporate_use + created_at: <%= Time.current %> + updated_at: <%= Time.current %> diff --git a/test/fixtures/faqs_categories.yml b/test/fixtures/faqs_categories.yml index eef65b5a901..9674a53e0ce 100644 --- a/test/fixtures/faqs_categories.yml +++ b/test/fixtures/faqs_categories.yml @@ -1,20 +1,34 @@ faqs_categories1: name: study_content + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories2: name: study_environment + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories3: name: fee + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories4: name: find_job + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories5: name: join + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories6: name: withdrawal_hibernation_graduation + created_at: <%= Time.current %> + updated_at: <%= Time.current %> faqs_categories7: name: corporate_use + created_at: <%= Time.current %> + updated_at: <%= Time.current %> diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index a7c059b784e..265268d4c0b 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -10,6 +10,8 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - assert_selector '.faqs-item', count: FAQ.where(category: 'study_environment').size + + study_environment_id = FaqsCategories.find_by(name: "study_environment").id + assert_selector '.faqs-item', count: FAQ.where(faqs_categories_id: study_environment_id).size end end From f282e6b4c75434b38dbd2f2aa3fd58b4eca3a594 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 27 Mar 2024 21:26:41 +0900 Subject: [PATCH 063/101] =?UTF-8?q?=E8=90=BD=E3=81=A1=E3=82=8B=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/models/faq_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index 6c148a1885a..3933bec8fba 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -22,7 +22,7 @@ class FaqTest < ActiveSupport::TestCase end test 'faq1 is invalid if category is null' do - @faq1.category = nil + @faq1.faqs_categories_id = nil assert @faq1.invalid? end From 81fe5b9390549772006144ce8739dbd0981cbd4e Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 27 Mar 2024 21:35:59 +0900 Subject: [PATCH 064/101] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=82=AB=E3=83=A9=E3=83=A0=E3=81=AB=E3=80=81null?= =?UTF-8?q?=E5=88=B6=E7=B4=84=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ot_null_constraint_to_faq_categories_id.rb | 5 +++ ...l_constraint_to_name_in_faqs_categories.rb | 5 +++ db/schema.rb | 44 ++++++++++--------- 3 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb create mode 100644 db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb diff --git a/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb b/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb new file mode 100644 index 00000000000..cd9d61e9ec6 --- /dev/null +++ b/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb @@ -0,0 +1,5 @@ +class AddNotNullConstraintToFAQCategoriesId < ActiveRecord::Migration[6.1] + def change + change_column_null :faqs, :faqs_categories_id, false + end +end diff --git a/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb b/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb new file mode 100644 index 00000000000..d395995047e --- /dev/null +++ b/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb @@ -0,0 +1,5 @@ +class AddNotNullConstraintToNameInFaqsCategories < ActiveRecord::Migration[6.1] + def change + change_column_null :faqs_categories, :name, false + end +end diff --git a/db/schema.rb b/db/schema.rb index 75cb68c7f7c..fd5d47d8fdd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -126,8 +126,8 @@ end create_table "categories", id: :serial, force: :cascade do |t| - t.string "name" - t.string "slug" + t.string "name", limit: 255 + t.string "slug", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.text "description" @@ -181,13 +181,14 @@ t.datetime "updated_at" t.string "commentable_type", default: "Report" t.index ["commentable_id"], name: "index_comments_on_commentable_id" + t.index ["user_id"], name: "comment_user_id" t.index ["user_id"], name: "index_comments_on_user_id" end create_table "companies", id: :serial, force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.text "description" - t.string "website" + t.string "website", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.text "tos" @@ -273,14 +274,14 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.bigint "faqs_categories_id" + t.bigint "faqs_categories_id", null: false t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true t.index ["faqs_categories_id"], name: "index_faqs_on_faqs_categories_id" t.index ["question"], name: "index_faqs_on_question", unique: true end create_table "faqs_categories", force: :cascade do |t| - t.string "name" + t.string "name", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end @@ -572,8 +573,8 @@ t.integer "kind", default: 0, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["reactionable_type", "reactionable_id"], name: "index_reactions_on_reactionable" - t.index ["user_id", "reactionable_id", "reactionable_type", "kind"], name: "index_reactions_on_reactionable_u_k", unique: true + t.index ["reactionable_type", "reactionable_id"], name: "index_reactions_on_reactionable_type_and_reactionable_id" + t.index ["user_id", "reactionable_id", "reactionable_type", "kind"], name: "index_reactions_on_reactionable", unique: true t.index ["user_id"], name: "index_reactions_on_user_id" end @@ -634,6 +635,7 @@ t.index ["created_at"], name: "index_reports_on_created_at" t.index ["user_id", "reported_on"], name: "index_reports_on_user_id_and_reported_on", unique: true t.index ["user_id", "title"], name: "index_reports_on_user_id_and_title", unique: true + t.index ["user_id"], name: "reports_user_id" end create_table "request_retirements", force: :cascade do |t| @@ -721,21 +723,21 @@ end create_table "users", id: :serial, force: :cascade do |t| - t.string "login_name", null: false - t.string "email" - t.string "crypted_password" - t.string "salt" + t.string "login_name", limit: 255, null: false + t.string "email", limit: 255 + t.string "crypted_password", limit: 255 + t.string "salt", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "remember_me_token" + t.string "remember_me_token", limit: 255 t.datetime "remember_me_token_expires_at" - t.string "twitter_account" - t.string "facebook_url" - t.string "blog_url" + t.string "twitter_account", limit: 255 + t.string "facebook_url", limit: 255 + t.string "blog_url", limit: 255 t.integer "company_id" t.text "description" t.datetime "accessed_at" - t.string "github_account" + t.string "github_account", limit: 255 t.boolean "adviser", default: false, null: false t.boolean "nda", default: true, null: false t.string "reset_password_token" @@ -757,13 +759,13 @@ t.string "subscription_id" t.boolean "mail_notification", default: true, null: false t.boolean "job_seeker", default: false, null: false - t.string "github_id" t.boolean "github_collaborator", default: false, null: false - t.string "name", default: "", null: false - t.string "name_kana", default: "", null: false + t.string "github_id" t.integer "satisfaction" t.text "opinion" t.bigint "retire_reasons", default: 0, null: false + t.string "name", default: "", null: false + t.string "name_kana", default: "", null: false t.string "unsubscribe_email_token" t.text "mentor_memo" t.text "after_graduation_hope" @@ -800,7 +802,7 @@ t.datetime "updated_at", null: false t.integer "user_id", null: false t.index ["watchable_type", "watchable_id", "user_id"], name: "index_watches_on_watchable_type_and_watchable_id_and_user_id", unique: true - t.index ["watchable_type", "watchable_id"], name: "index_watches_on_watchable" + t.index ["watchable_type", "watchable_id"], name: "index_watches_on_watchable_type_and_watchable_id" end create_table "works", force: :cascade do |t| From d485923ce5b7c331f2cf81534e480521fc8835b6 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 16 Apr 2024 11:42:22 +0900 Subject: [PATCH 065/101] =?UTF-8?q?yml=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE=E8=A8=98=E8=BF=B0?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=81test=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/fixtures/faqs.yml | 42 +++++++++++++++---------------- db/fixtures/faqs_categories.yml | 7 ++++++ test/fixtures/faqs.yml | 42 +++++++++++++++---------------- test/fixtures/faqs_categories.yml | 7 ++++++ test/system/admin/faq_test.rb | 4 +-- test/system/faq_test.rb | 4 +-- 6 files changed, 60 insertions(+), 46 deletions(-) diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 756dee83c15..32c387e11f8 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_categories: faqs_categories6 + faqs_categories_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_categories: faqs_categories6 + faqs_categories_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_categories: faqs_categories3 + faqs_categories_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_categories: faqs_categories4 + faqs_categories_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_categories: faqs_categories4 + faqs_categories_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_categories: faqs_categories7 + faqs_categories_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_categories: faqs_categories6 + faqs_categories_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_categories: faqs_categories3 + faqs_categories_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 diff --git a/db/fixtures/faqs_categories.yml b/db/fixtures/faqs_categories.yml index 9674a53e0ce..a6d94f121ef 100644 --- a/db/fixtures/faqs_categories.yml +++ b/db/fixtures/faqs_categories.yml @@ -1,34 +1,41 @@ faqs_categories1: + id: 1 name: study_content created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories2: + id: 2 name: study_environment created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories3: + id: 3 name: fee created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories4: + id: 4 name: find_job created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories5: + id: 5 name: join created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories6: + id: 6 name: withdrawal_hibernation_graduation created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories7: + id: 7 name: corporate_use created_at: <%= Time.current %> updated_at: <%= Time.current %> diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 889586fff83..a1ac4b05c78 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_categories: faqs_categories6 + faqs_categories_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_categories: faqs_categories6 + faqs_categories_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_categories: faqs_categories3 + faqs_categories_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_categories: faqs_categories4 + faqs_categories_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_categories: faqs_categories4 + faqs_categories_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_categories: faqs_categories5 + faqs_categories_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_categories: faqs_categories7 + faqs_categories_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_categories: faqs_categories6 + faqs_categories_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_categories: faqs_categories3 + faqs_categories_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_categories: faqs_categories2 + faqs_categories_id: 2 diff --git a/test/fixtures/faqs_categories.yml b/test/fixtures/faqs_categories.yml index 9674a53e0ce..a6d94f121ef 100644 --- a/test/fixtures/faqs_categories.yml +++ b/test/fixtures/faqs_categories.yml @@ -1,34 +1,41 @@ faqs_categories1: + id: 1 name: study_content created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories2: + id: 2 name: study_environment created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories3: + id: 3 name: fee created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories4: + id: 4 name: find_job created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories5: + id: 5 name: join created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories6: + id: 6 name: withdrawal_hibernation_graduation created_at: <%= Time.current %> updated_at: <%= Time.current %> faqs_categories7: + id: 7 name: corporate_use created_at: <%= Time.current %> updated_at: <%= Time.current %> diff --git a/test/system/admin/faq_test.rb b/test/system/admin/faq_test.rb index 2b015fda000..060d736d475 100644 --- a/test/system/admin/faq_test.rb +++ b/test/system/admin/faq_test.rb @@ -13,7 +13,7 @@ class Admin::FAQTest < ApplicationSystemTestCase within 'form[name=faq]' do fill_in 'faq[question]', with: 'test FAQ' fill_in 'faq[answer]', with: 'test FAQ' - choose 'faq_category_study_content' + choose '学習内容について' click_button '登録する' end assert_text 'FAQを作成しました。' @@ -24,7 +24,7 @@ class Admin::FAQTest < ApplicationSystemTestCase within 'form[name=faq]' do fill_in 'faq[question]', with: 'updated FAQ' fill_in 'faq[answer]', with: 'updated FAQ' - choose 'faq_category_study_content' + choose '学習内容について' click_button '更新する' end assert_text 'FAQを更新しました。' diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index 265268d4c0b..eb3e3f28dd3 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -10,8 +10,8 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - - study_environment_id = FaqsCategories.find_by(name: "study_environment").id + + study_environment_id = FaqsCategories.find_by(name: 'study_environment').id assert_selector '.faqs-item', count: FAQ.where(faqs_categories_id: study_environment_id).size end end From e0af99ce3bde9238d9b8df83c1b2ead9220641dc Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 16 Apr 2024 12:05:04 +0900 Subject: [PATCH 066/101] =?UTF-8?q?slim=20lint=E3=81=AE=E6=8C=87=E6=91=98?= =?UTF-8?q?=E7=82=B9=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faq/_form.html.slim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 12eab101216..913e4b0654c 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -19,8 +19,8 @@ label.a-form-label | カテゴリー - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| - = f.radio_button :faqs_categories_id, FaqsCategories.find_by(name: "#{category}").id - = f.label :faqs_categories_id, t("faq.#{category}"), value: FaqsCategories.find_by(name: "#{category}").id + = f.radio_button :faqs_categories_id, FaqsCategories.find_by(name: category.to_s).id + = f.label :faqs_categories_id, t("faq.#{category}"), value: FaqsCategories.find_by(name: category.to_s).id .form-actions ul.form-actions__items li.form-actions__item.is-main From c46b643f2cc756426311c85292f2767ee9ccfa43 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Fri, 26 Apr 2024 16:33:44 +0900 Subject: [PATCH 067/101] =?UTF-8?q?name=E3=81=AEvalidate=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/faqs_categories.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/faqs_categories.rb b/app/models/faqs_categories.rb index e7cf80dbae8..c37f6eb45f7 100644 --- a/app/models/faqs_categories.rb +++ b/app/models/faqs_categories.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true class FaqsCategories < ApplicationRecord + validates :name, presence: true, uniqueness: true + has_many :faqs, dependent: :destroy end From 2cb8d29b3f5835d790a6daca96ecbdbcac9be828 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Sun, 5 May 2024 11:12:05 +0900 Subject: [PATCH 068/101] =?UTF-8?q?=E3=83=A2=E3=83=87=E3=83=AB=E5=90=8D?= =?UTF-8?q?=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 2 +- app/models/faq.rb | 2 +- app/models/{faqs_categories.rb => faqs_category.rb} | 2 +- app/views/admin/faq/_form.html.slim | 4 ++-- app/views/admin/faq/_table.html.slim | 2 +- app/views/admin/faq/show.html.slim | 2 +- test/system/faq_test.rb | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) rename app/models/{faqs_categories.rb => faqs_category.rb} (75%) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 5a4c8b0e66b..d0da1b49979 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,7 +16,7 @@ def job_support; end def pricing; end def faq - category = FaqsCategories.find_by(name: params[:category]) + category = FaqsCategory.find_by(name: params[:category]) @faqs = if params[:category].present? FAQ.where(faqs_categories_id: category.id) if category.present? else diff --git a/app/models/faq.rb b/app/models/faq.rb index 987b49afa4b..8cf64704bae 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -5,6 +5,6 @@ class FAQ < ApplicationRecord validates :question, presence: true, uniqueness: true default_scope -> { order(:position) } - belongs_to :faqs_categories + belongs_to :faqs_category, optional: true acts_as_list end diff --git a/app/models/faqs_categories.rb b/app/models/faqs_category.rb similarity index 75% rename from app/models/faqs_categories.rb rename to app/models/faqs_category.rb index c37f6eb45f7..b44addfe10e 100644 --- a/app/models/faqs_categories.rb +++ b/app/models/faqs_category.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class FaqsCategories < ApplicationRecord +class FaqsCategory < ApplicationRecord validates :name, presence: true, uniqueness: true has_many :faqs, dependent: :destroy diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 913e4b0654c..2465e23ac17 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -19,8 +19,8 @@ label.a-form-label | カテゴリー - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| - = f.radio_button :faqs_categories_id, FaqsCategories.find_by(name: category.to_s).id - = f.label :faqs_categories_id, t("faq.#{category}"), value: FaqsCategories.find_by(name: category.to_s).id + = f.radio_button :faqs_categories_id, FaqsCategory.find_by(name: category.to_s).id + = f.label :faqs_categories_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index 51d663843f1..db119949f8c 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -22,4 +22,4 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - = t("faq.#{FaqsCategories.find_by(id: faq.faqs_categories_id).name}") + = t("faq.#{FaqsCategory.find_by(id: faq.faqs_categories_id).name}") diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index a3e9e8d474d..03b3614706d 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -52,7 +52,7 @@ main.page-main .page-content-header-metas__start .page-content-header-metas__meta .a-meta - = t("faq.#{FaqsCategories.find_by(id: @faq.faqs_categories_id).name}") + = t("faq.#{FaqsCategory.find_by(id: @faq.faqs_categories_id).name}") .a-card .card-body diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index eb3e3f28dd3..6bb62b257e4 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -11,7 +11,7 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - study_environment_id = FaqsCategories.find_by(name: 'study_environment').id + study_environment_id = FaqsCategory.find_by(name: 'study_environment').id assert_selector '.faqs-item', count: FAQ.where(faqs_categories_id: study_environment_id).size end end From c62bacfe5899c1ea0f709b928eca618e662606db Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 6 May 2024 16:32:33 +0900 Subject: [PATCH 069/101] =?UTF-8?q?=E3=83=A2=E3=83=87=E3=83=AB=E5=90=8D?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B?= =?UTF-8?q?=E3=81=A6=E3=80=81DB=E3=81=AE=E3=82=AB=E3=83=A9=E3=83=A0?= =?UTF-8?q?=E5=90=8D=E3=82=92=E5=A4=89=E6=9B=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faq_controller.rb | 2 +- app/controllers/welcome_controller.rb | 2 +- app/models/faq.rb | 2 +- app/models/faqs_category.rb | 2 +- app/views/admin/faq/_form.html.slim | 4 +- app/views/admin/faq/_table.html.slim | 2 +- app/views/admin/faq/show.html.slim | 2 +- config/locales/ja.yml | 11 +---- db/fixtures/faqs.yml | 42 +++++++++---------- ..._faqs_categories_id_to_faqs_category_id.rb | 5 +++ db/schema.rb | 11 +++-- test/fixtures/faqs.yml | 42 +++++++++---------- test/models/faq_test.rb | 2 +- test/system/faq_test.rb | 2 +- 14 files changed, 65 insertions(+), 66 deletions(-) create mode 100644 db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faq_controller.rb index e5ebe4e8c44..1ad7226b29e 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faq_controller.rb @@ -40,7 +40,7 @@ def destroy private def faq_params - params.require(:faq).permit(:answer, :question, :faqs_categories_id) + params.require(:faq).permit(:answer, :question, :faqs_category_id) end def set_faq diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index d0da1b49979..44b120efab7 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -18,7 +18,7 @@ def pricing; end def faq category = FaqsCategory.find_by(name: params[:category]) @faqs = if params[:category].present? - FAQ.where(faqs_categories_id: category.id) if category.present? + FAQ.where(faqs_category_id: category.id) if category.present? else FAQ.all end diff --git a/app/models/faq.rb b/app/models/faq.rb index 8cf64704bae..8a473fdb121 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -5,6 +5,6 @@ class FAQ < ApplicationRecord validates :question, presence: true, uniqueness: true default_scope -> { order(:position) } - belongs_to :faqs_category, optional: true + belongs_to :faqs_category acts_as_list end diff --git a/app/models/faqs_category.rb b/app/models/faqs_category.rb index b44addfe10e..482654a28ca 100644 --- a/app/models/faqs_category.rb +++ b/app/models/faqs_category.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class FaqsCategory < ApplicationRecord - validates :name, presence: true, uniqueness: true + validates :name, presence: true, unique: true has_many :faqs, dependent: :destroy end diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faq/_form.html.slim index 2465e23ac17..a7d00128613 100644 --- a/app/views/admin/faq/_form.html.slim +++ b/app/views/admin/faq/_form.html.slim @@ -19,8 +19,8 @@ label.a-form-label | カテゴリー - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| - = f.radio_button :faqs_categories_id, FaqsCategory.find_by(name: category.to_s).id - = f.label :faqs_categories_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id + = f.radio_button :faqs_category_id, FaqsCategory.find_by(name: category.to_s).id + = f.label :faqs_category_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faq/_table.html.slim index db119949f8c..5cf657a12fb 100644 --- a/app/views/admin/faq/_table.html.slim +++ b/app/views/admin/faq/_table.html.slim @@ -22,4 +22,4 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - = t("faq.#{FaqsCategory.find_by(id: faq.faqs_categories_id).name}") + = t("faq.#{FaqsCategory.find_by(id: faq.faqs_category_id).name}") diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index 03b3614706d..57d98fa46e8 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -52,7 +52,7 @@ main.page-main .page-content-header-metas__start .page-content-header-metas__meta .a-meta - = t("faq.#{FaqsCategory.find_by(id: @faq.faqs_categories_id).name}") + = t("faq.#{FaqsCategory.find_by(id: @faq.faqs_category_id).name}") .a-card .card-body diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 0bae834b2a5..ff8e5b33141 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -294,7 +294,6 @@ ja: choices: 選択肢 buzz: body: 本文 -<<<<<<< HEAD request_retirement: requester_name: 申請者のアカウント requester_email: 申請者のメールアドレス @@ -308,6 +307,7 @@ ja: faq: question: 質問 answer: 回答 + faqs_category: カテゴリー enums: user: job: @@ -455,12 +455,3 @@ ja: followup: "こんにちは。\nご登録から30日ほど経ちますが、学習について困っていることや詰まっている部分などありますでしょうか?\nもしあれば、メンターの皆さんにお気軽にご相談ください。" comeback: "お帰りなさい!!復会ありがとうございます。\n休会中に何か変わったことがあれば、再びスムーズに学び始めることができるように全力でサポートします。何か困ったことや質問があれば、メンターの皆さんに遠慮なくご相談ください。\n\nまたフィヨルドブートキャンプの Discord のサーバーに入室できるように、再度、Doc にある Discord の招待 URL にアクセスをお願いします。\n" unregistered: 未登録 - faq: - all: 全て - study_content: 学習内容について - study_environment: 学習環境について - fee: 利用料について - find_job: 就職について - join: 入会について - withdrawal_hibernation_graduation: 退会、休会、卒業について - corporate_use: 法人利用について diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 32c387e11f8..a0117e116ae 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_categories_id: 6 + faqs_category_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_categories_id: 6 + faqs_category_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_categories_id: 3 + faqs_category_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_categories_id: 2 + faqs_category_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_categories_id: 5 + faqs_category_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_categories_id: 5 + faqs_category_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_categories_id: 5 + faqs_category_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_categories_id: 2 + faqs_category_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_categories_id: 2 + faqs_category_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_categories_id: 4 + faqs_category_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_categories_id: 4 + faqs_category_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_categories_id: 5 + faqs_category_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_categories_id: 7 + faqs_category_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_categories_id: 6 + faqs_category_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_categories_id: 3 + faqs_category_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_categories_id: 2 + faqs_category_id: 2 diff --git a/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb b/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb new file mode 100644 index 00000000000..9dbba246893 --- /dev/null +++ b/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb @@ -0,0 +1,5 @@ +class RenameFaqsCategoriesIdToFaqsCategoryId < ActiveRecord::Migration[6.1] + def change + rename_column :faqs, :faqs_categories_id, :faqs_category_id + end +end diff --git a/db/schema.rb b/db/schema.rb index fd5d47d8fdd..fd3ecdc29ea 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -228,6 +228,9 @@ t.index ["course_id", "category_id"], name: "index_courses_categories_on_course_id_and_category_id", unique: true end + create_table "data_migrations", primary_key: "version", id: :string, force: :cascade do |t| + end + create_table "discord_profiles", force: :cascade do |t| t.bigint "user_id" t.string "account_name" @@ -274,9 +277,9 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.bigint "faqs_categories_id", null: false + t.bigint "faqs_category_id", null: false t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true - t.index ["faqs_categories_id"], name: "index_faqs_on_faqs_categories_id" + t.index ["faqs_category_id"], name: "index_faqs_on_faqs_category_id" t.index ["question"], name: "index_faqs_on_question", unique: true end @@ -605,9 +608,9 @@ t.boolean "hold_national_holiday", null: false t.time "start_at", null: false t.time "end_at", null: false - t.boolean "wip", default: false, null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.boolean "wip", default: false, null: false t.integer "category", default: 0, null: false t.boolean "all", default: false, null: false t.datetime "published_at" @@ -829,7 +832,7 @@ add_foreign_key "check_boxes", "survey_questions" add_foreign_key "discord_profiles", "users" add_foreign_key "external_entries", "users" - add_foreign_key "faqs", "faqs_categories", column: "faqs_categories_id" + add_foreign_key "faqs", "faqs_categories" add_foreign_key "hibernations", "users" add_foreign_key "images", "users" add_foreign_key "learning_minute_statistics", "practices" diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index a1ac4b05c78..000ccf0d449 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_categories_id: 6 + faqs_category_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_categories_id: 6 + faqs_category_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_categories_id: 3 + faqs_category_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_categories_id: 2 + faqs_category_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_categories_id: 5 + faqs_category_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_categories_id: 5 + faqs_category_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_categories_id: 5 + faqs_category_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_categories_id: 2 + faqs_category_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_categories_id: 2 + faqs_category_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_categories_id: 4 + faqs_category_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_categories_id: 4 + faqs_category_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_categories_id: 5 + faqs_category_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_categories_id: 2 + faqs_category_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_categories_id: 7 + faqs_category_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_categories_id: 6 + faqs_category_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_categories_id: 3 + faqs_category_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_categories_id: 2 + faqs_category_id: 2 diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index 3933bec8fba..ccee2661059 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -22,7 +22,7 @@ class FaqTest < ActiveSupport::TestCase end test 'faq1 is invalid if category is null' do - @faq1.faqs_categories_id = nil + @faq1.faqs_category_id = nil assert @faq1.invalid? end diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index 6bb62b257e4..f7083d3dc17 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -12,6 +12,6 @@ class FAQTest < ApplicationSystemTestCase visit '/faq?category=study_environment' study_environment_id = FaqsCategory.find_by(name: 'study_environment').id - assert_selector '.faqs-item', count: FAQ.where(faqs_categories_id: study_environment_id).size + assert_selector '.faqs-item', count: FAQ.where(faqs_category_id: study_environment_id).size end end From 69f5fb5b8c046d93552606b3deec33307020a421 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 6 May 2024 19:20:52 +0900 Subject: [PATCH 070/101] =?UTF-8?q?controller=E5=90=8D=E3=81=A8=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E5=90=8D=E5=A4=89=E6=9B=B4=E3=80=81?= =?UTF-8?q?name=E3=82=AB=E3=83=A9=E3=83=A0=E3=81=ABunique=E5=88=B6?= =?UTF-8?q?=E7=B4=84=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/{faq_controller.rb => faqs_controller.rb} | 2 +- app/models/faqs_category.rb | 2 +- app/views/admin/{faq => faqs}/_form.html.slim | 0 app/views/admin/{faq => faqs}/_table.html.slim | 0 app/views/admin/{faq => faqs}/edit.html.slim | 0 app/views/admin/{faq => faqs}/index.html.slim | 0 app/views/admin/{faq => faqs}/new.html.slim | 0 app/views/admin/{faq => faqs}/show.html.slim | 0 config/routes/admin.rb | 2 +- ...0240506101642_add_unique_index_to_faqs_categories_name.rb | 5 +++++ db/schema.rb | 1 + 11 files changed, 9 insertions(+), 3 deletions(-) rename app/controllers/admin/{faq_controller.rb => faqs_controller.rb} (94%) rename app/views/admin/{faq => faqs}/_form.html.slim (100%) rename app/views/admin/{faq => faqs}/_table.html.slim (100%) rename app/views/admin/{faq => faqs}/edit.html.slim (100%) rename app/views/admin/{faq => faqs}/index.html.slim (100%) rename app/views/admin/{faq => faqs}/new.html.slim (100%) rename app/views/admin/{faq => faqs}/show.html.slim (100%) create mode 100644 db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb diff --git a/app/controllers/admin/faq_controller.rb b/app/controllers/admin/faqs_controller.rb similarity index 94% rename from app/controllers/admin/faq_controller.rb rename to app/controllers/admin/faqs_controller.rb index 1ad7226b29e..9cf57b039c2 100644 --- a/app/controllers/admin/faq_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class Admin::FAQController < AdminController +class Admin::FaqsController < AdminController before_action :set_faq, only: %i[show edit update destroy] def index @faqs = FAQ.all diff --git a/app/models/faqs_category.rb b/app/models/faqs_category.rb index 482654a28ca..b44addfe10e 100644 --- a/app/models/faqs_category.rb +++ b/app/models/faqs_category.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class FaqsCategory < ApplicationRecord - validates :name, presence: true, unique: true + validates :name, presence: true, uniqueness: true has_many :faqs, dependent: :destroy end diff --git a/app/views/admin/faq/_form.html.slim b/app/views/admin/faqs/_form.html.slim similarity index 100% rename from app/views/admin/faq/_form.html.slim rename to app/views/admin/faqs/_form.html.slim diff --git a/app/views/admin/faq/_table.html.slim b/app/views/admin/faqs/_table.html.slim similarity index 100% rename from app/views/admin/faq/_table.html.slim rename to app/views/admin/faqs/_table.html.slim diff --git a/app/views/admin/faq/edit.html.slim b/app/views/admin/faqs/edit.html.slim similarity index 100% rename from app/views/admin/faq/edit.html.slim rename to app/views/admin/faqs/edit.html.slim diff --git a/app/views/admin/faq/index.html.slim b/app/views/admin/faqs/index.html.slim similarity index 100% rename from app/views/admin/faq/index.html.slim rename to app/views/admin/faqs/index.html.slim diff --git a/app/views/admin/faq/new.html.slim b/app/views/admin/faqs/new.html.slim similarity index 100% rename from app/views/admin/faq/new.html.slim rename to app/views/admin/faqs/new.html.slim diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faqs/show.html.slim similarity index 100% rename from app/views/admin/faq/show.html.slim rename to app/views/admin/faqs/show.html.slim diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 4a9f0572282..9b6ec50c597 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -11,6 +11,6 @@ resources :campaigns, only: %i(new create index edit update) resources :inquiries, only: %i(index show) resources :invitation_url, only: %i(index) - resources :faqs, controller: 'faq' + resources :faqs end end diff --git a/db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb b/db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb new file mode 100644 index 00000000000..09a79007930 --- /dev/null +++ b/db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb @@ -0,0 +1,5 @@ +class AddUniqueIndexToFaqsCategoriesName < ActiveRecord::Migration[6.1] + def change + add_index :faqs_categories, :name, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index fd3ecdc29ea..e2769e6a5d0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -287,6 +287,7 @@ t.string "name", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.index ["name"], name: "index_faqs_categories_on_name", unique: true end create_table "followings", force: :cascade do |t| From e7b07a80d0ad4371dee4dd0e2da7ba7391b088fa Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 7 May 2024 11:33:55 +0900 Subject: [PATCH 071/101] =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE?= =?UTF-8?q?=E8=A8=98=E8=BC=89=E5=A0=B4=E6=89=80=E3=82=92views=20=E2=86=92?= =?UTF-8?q?=20controller=E3=81=AB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 5 +++++ app/views/admin/faqs/_form.html.slim | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index 9cf57b039c2..69e872623b6 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -2,6 +2,7 @@ class Admin::FaqsController < AdminController before_action :set_faq, only: %i[show edit update destroy] + before_action :set_category, only: %i[edit new] def index @faqs = FAQ.all end @@ -46,4 +47,8 @@ def faq_params def set_faq @faq = FAQ.find(params[:id]) end + + def set_category + @category = %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use] + end end diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index a7d00128613..c3a9b578923 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -18,7 +18,7 @@ = render 'errors', object: faq label.a-form-label | カテゴリー - - %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| + - @category.each do |category| = f.radio_button :faqs_category_id, FaqsCategory.find_by(name: category.to_s).id = f.label :faqs_category_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id .form-actions From 3a7b55bb1b71d76e6f9e5ab82c7a6b5a9a5e4b36 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 8 May 2024 02:34:45 +0900 Subject: [PATCH 072/101] =?UTF-8?q?enum=E3=82=92=E4=BD=BF=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E5=87=A6=E7=90=86=E3=81=AB=E5=A4=89=E6=9B=B4=20faqs?= =?UTF-8?q?=5Fcategories=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=82=92=E4=BD=BF=E3=81=A3=E3=81=9F?= =?UTF-8?q?=E5=87=A6=E7=90=86=E7=BE=A4=E3=81=A8=E3=83=86=E3=83=BC=E3=83=96?= =?UTF-8?q?=E3=83=AB=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 13 ++---- app/controllers/welcome_controller.rb | 4 +- app/models/faq.rb | 12 +++++- app/models/faqs_category.rb | 7 ---- app/views/admin/faqs/_form.html.slim | 6 +-- app/views/admin/faqs/_table.html.slim | 2 +- app/views/admin/faqs/show.html.slim | 2 +- db/fixtures/faqs.yml | 42 +++++++++---------- db/fixtures/faqs_categories.yml | 41 ------------------ ...0507123850_remove_foreign_key_from_faqs.rb | 5 +++ ...931_change_faqs_category_id_to_category.rb | 6 +++ ...reign_key_from_faqs_and_faqs_categories.rb | 5 +++ .../20240507171015_drop_faqs_categories.rb | 5 +++ db/schema.rb | 12 +----- db/seeds.rb | 1 - test/fixtures/faqs.yml | 42 +++++++++---------- test/fixtures/faqs_categories.yml | 41 ------------------ test/models/faq_test.rb | 2 +- test/system/faq_test.rb | 3 +- 19 files changed, 89 insertions(+), 162 deletions(-) delete mode 100644 app/models/faqs_category.rb delete mode 100644 db/fixtures/faqs_categories.yml create mode 100644 db/migrate/20240507123850_remove_foreign_key_from_faqs.rb create mode 100644 db/migrate/20240507125931_change_faqs_category_id_to_category.rb create mode 100644 db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb create mode 100644 db/migrate/20240507171015_drop_faqs_categories.rb delete mode 100644 test/fixtures/faqs_categories.yml diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index 69e872623b6..63866da39e4 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -2,7 +2,6 @@ class Admin::FaqsController < AdminController before_action :set_faq, only: %i[show edit update destroy] - before_action :set_category, only: %i[edit new] def index @faqs = FAQ.all end @@ -12,7 +11,7 @@ def new end def create - @faq = FAQ.new(faq_params) + @faq = FAQ.new(faq_params.merge(category: faq_params[:category].to_i)) if @faq.save redirect_to admin_faqs_path, notice: 'FAQを作成しました。' @@ -26,8 +25,8 @@ def show; end def edit; end def update - if @faq.update(faq_params) - redirect_to admin_faqs_path, notice: 'FAQを更新しました。' + if @faq.update(faq_params.merge(category: faq_params[:category].to_i)) + redirect_to admin_faq_path(@faq), notice: 'FAQを更新しました。' else render 'edit' end @@ -41,14 +40,10 @@ def destroy private def faq_params - params.require(:faq).permit(:answer, :question, :faqs_category_id) + params.require(:faq).permit(:answer, :question, :category) end def set_faq @faq = FAQ.find(params[:id]) end - - def set_category - @category = %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use] - end end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 44b120efab7..8a501872cf2 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,9 +16,9 @@ def job_support; end def pricing; end def faq - category = FaqsCategory.find_by(name: params[:category]) + category_id = FAQ.categories[:"#{params[:category]}"] @faqs = if params[:category].present? - FAQ.where(faqs_category_id: category.id) if category.present? + FAQ.where(category: category_id) if category_id.present? else FAQ.all end diff --git a/app/models/faq.rb b/app/models/faq.rb index 8a473fdb121..cbf351f22d8 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -3,8 +3,18 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true + validates :category, presence: true default_scope -> { order(:position) } - belongs_to :faqs_category acts_as_list + + enum category: { + study_content: 0, + study_environment: 1, + fee: 2, + find_job: 3, + join: 4, + withdrawal_hibernation_graduation: 5, + corporate_use: 6 + }, _prefix: true end diff --git a/app/models/faqs_category.rb b/app/models/faqs_category.rb deleted file mode 100644 index b44addfe10e..00000000000 --- a/app/models/faqs_category.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -class FaqsCategory < ApplicationRecord - validates :name, presence: true, uniqueness: true - - has_many :faqs, dependent: :destroy -end diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index c3a9b578923..c9d695099da 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -18,9 +18,9 @@ = render 'errors', object: faq label.a-form-label | カテゴリー - - @category.each do |category| - = f.radio_button :faqs_category_id, FaqsCategory.find_by(name: category.to_s).id - = f.label :faqs_category_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id + - FAQ.categories.keys.each do |category| + = f.radio_button :category, FAQ.categories[:"#{category}"] + = f.label :category, t("faq.#{category}"), value: FAQ.categories[:"#{category}"] .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim index 5cf657a12fb..ec5e2b3d615 100644 --- a/app/views/admin/faqs/_table.html.slim +++ b/app/views/admin/faqs/_table.html.slim @@ -22,4 +22,4 @@ span.js-grab.a-grab i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center - = t("faq.#{FaqsCategory.find_by(id: faq.faqs_category_id).name}") + = t("faq.#{faq.category}") diff --git a/app/views/admin/faqs/show.html.slim b/app/views/admin/faqs/show.html.slim index 57d98fa46e8..6cfdcdbfcce 100644 --- a/app/views/admin/faqs/show.html.slim +++ b/app/views/admin/faqs/show.html.slim @@ -52,7 +52,7 @@ main.page-main .page-content-header-metas__start .page-content-header-metas__meta .a-meta - = t("faq.#{FaqsCategory.find_by(id: @faq.faqs_category_id).name}") + = t("faq.#{@faq.category}") .a-card .card-body diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index a0117e116ae..33b363f87e2 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_category_id: 2 + category: 1 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_category_id: 6 + category: 5 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_category_id: 2 + category: 1 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_category_id: 6 + category: 5 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_category_id: 2 + category: 1 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_category_id: 3 + category: 2 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_category_id: 2 + category: 1 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_category_id: 5 + category: 4 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_category_id: 5 + category: 4 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_category_id: 5 + category: 4 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_category_id: 2 + category: 1 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_category_id: 2 + category: 1 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_category_id: 2 + category: 1 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_category_id: 4 + category: 3 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_category_id: 4 + category: 3 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_category_id: 5 + category: 4 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_category_id: 2 + category: 1 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_category_id: 7 + category: 6 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_category_id: 6 + category: 5 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_category_id: 3 + category: 2 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_category_id: 2 + category: 1 diff --git a/db/fixtures/faqs_categories.yml b/db/fixtures/faqs_categories.yml deleted file mode 100644 index a6d94f121ef..00000000000 --- a/db/fixtures/faqs_categories.yml +++ /dev/null @@ -1,41 +0,0 @@ -faqs_categories1: - id: 1 - name: study_content - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories2: - id: 2 - name: study_environment - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories3: - id: 3 - name: fee - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories4: - id: 4 - name: find_job - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories5: - id: 5 - name: join - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories6: - id: 6 - name: withdrawal_hibernation_graduation - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories7: - id: 7 - name: corporate_use - created_at: <%= Time.current %> - updated_at: <%= Time.current %> diff --git a/db/migrate/20240507123850_remove_foreign_key_from_faqs.rb b/db/migrate/20240507123850_remove_foreign_key_from_faqs.rb new file mode 100644 index 00000000000..ddab2551a82 --- /dev/null +++ b/db/migrate/20240507123850_remove_foreign_key_from_faqs.rb @@ -0,0 +1,5 @@ +class RemoveForeignKeyFromFaqs < ActiveRecord::Migration[6.1] + def down + remove_foreign_key :faqs, column: :faqs_category_id + end +end diff --git a/db/migrate/20240507125931_change_faqs_category_id_to_category.rb b/db/migrate/20240507125931_change_faqs_category_id_to_category.rb new file mode 100644 index 00000000000..0e9458577eb --- /dev/null +++ b/db/migrate/20240507125931_change_faqs_category_id_to_category.rb @@ -0,0 +1,6 @@ +class ChangeFaqsCategoryIdToCategory < ActiveRecord::Migration[6.1] + def change + rename_column :faqs, :faqs_category_id, :category + change_column :faqs, :category, :integer, null: false + end +end diff --git a/db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb b/db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb new file mode 100644 index 00000000000..8857d477bf5 --- /dev/null +++ b/db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb @@ -0,0 +1,5 @@ +class RemoveForeignKeyFromFaqsAndFaqsCategories < ActiveRecord::Migration[6.1] + def change + remove_foreign_key :faqs, :faqs_categories + end +end diff --git a/db/migrate/20240507171015_drop_faqs_categories.rb b/db/migrate/20240507171015_drop_faqs_categories.rb new file mode 100644 index 00000000000..2aef30ca91a --- /dev/null +++ b/db/migrate/20240507171015_drop_faqs_categories.rb @@ -0,0 +1,5 @@ +class DropFaqsCategories < ActiveRecord::Migration[6.1] + def change + drop_table :faqs_categories + end +end diff --git a/db/schema.rb b/db/schema.rb index e2769e6a5d0..32685740599 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -277,19 +277,12 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.bigint "faqs_category_id", null: false + t.integer "category", null: false t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true - t.index ["faqs_category_id"], name: "index_faqs_on_faqs_category_id" + t.index ["category"], name: "index_faqs_on_category" t.index ["question"], name: "index_faqs_on_question", unique: true end - create_table "faqs_categories", force: :cascade do |t| - t.string "name", null: false - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.index ["name"], name: "index_faqs_categories_on_name", unique: true - end - create_table "followings", force: :cascade do |t| t.integer "follower_id" t.integer "followed_id" @@ -833,7 +826,6 @@ add_foreign_key "check_boxes", "survey_questions" add_foreign_key "discord_profiles", "users" add_foreign_key "external_entries", "users" - add_foreign_key "faqs", "faqs_categories" add_foreign_key "hibernations", "users" add_foreign_key "images", "users" add_foreign_key "learning_minute_statistics", "practices" diff --git a/db/seeds.rb b/db/seeds.rb index f5e0688cf83..93f339af5f4 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -26,7 +26,6 @@ events external_entries faqs - faqs_categories followings reports learning_times diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 000ccf0d449..a66b834af54 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_category_id: 2 + category: 1 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_category_id: 6 + category: 5 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_category_id: 2 + category: 1 faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_category_id: 6 + category: 5 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_category_id: 2 + category: 1 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_category_id: 3 + category: 2 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_category_id: 2 + category: 1 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_category_id: 5 + category: 4 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_category_id: 5 + category: 4 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_category_id: 5 + category: 4 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_category_id: 2 + category: 1 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_category_id: 2 + category: 1 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_category_id: 2 + category: 1 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_category_id: 4 + category: 3 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_category_id: 4 + category: 3 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_category_id: 5 + category: 4 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_category_id: 2 + category: 1 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_category_id: 7 + category: 6 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_category_id: 6 + category: 5 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_category_id: 3 + category: 2 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_category_id: 2 + category: 1 diff --git a/test/fixtures/faqs_categories.yml b/test/fixtures/faqs_categories.yml deleted file mode 100644 index a6d94f121ef..00000000000 --- a/test/fixtures/faqs_categories.yml +++ /dev/null @@ -1,41 +0,0 @@ -faqs_categories1: - id: 1 - name: study_content - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories2: - id: 2 - name: study_environment - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories3: - id: 3 - name: fee - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories4: - id: 4 - name: find_job - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories5: - id: 5 - name: join - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories6: - id: 6 - name: withdrawal_hibernation_graduation - created_at: <%= Time.current %> - updated_at: <%= Time.current %> - -faqs_categories7: - id: 7 - name: corporate_use - created_at: <%= Time.current %> - updated_at: <%= Time.current %> diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index ccee2661059..6c148a1885a 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -22,7 +22,7 @@ class FaqTest < ActiveSupport::TestCase end test 'faq1 is invalid if category is null' do - @faq1.faqs_category_id = nil + @faq1.category = nil assert @faq1.invalid? end diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index f7083d3dc17..0edd4d22b88 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -11,7 +11,6 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - study_environment_id = FaqsCategory.find_by(name: 'study_environment').id - assert_selector '.faqs-item', count: FAQ.where(faqs_category_id: study_environment_id).size + assert_selector '.faqs-item', count: FAQ.category_study_environment.size end end From e08d6e0397a291017785346cb9ed15a600606e39 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 8 May 2024 02:53:47 +0900 Subject: [PATCH 073/101] =?UTF-8?q?slimLint=E9=81=95=E5=8F=8D=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faqs/_form.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index c9d695099da..82bbd2267d4 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -18,7 +18,7 @@ = render 'errors', object: faq label.a-form-label | カテゴリー - - FAQ.categories.keys.each do |category| + - FAQ.categories.each_key do |category| = f.radio_button :category, FAQ.categories[:"#{category}"] = f.label :category, t("faq.#{category}"), value: FAQ.categories[:"#{category}"] .form-actions From 4b4b09b419d2352c59d857c6504ad2000f627d43 Mon Sep 17 00:00:00 2001 From: machida Date: Thu, 2 May 2024 07:16:33 +0900 Subject: [PATCH 074/101] =?UTF-8?q?FAQ=E3=81=AEPC=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E8=A6=8B=E3=81=9F=E7=9B=AE=E3=82=92=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stylesheets/welcome/_side-filter.sass | 12 +++++ app/views/admin/faqs/edit.html.slim | 2 - app/views/admin/faqs/show.html.slim | 2 +- app/views/welcome/_faq_tabs.html.slim | 52 +++++++++---------- 4 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 app/javascript/stylesheets/welcome/_side-filter.sass diff --git a/app/javascript/stylesheets/welcome/_side-filter.sass b/app/javascript/stylesheets/welcome/_side-filter.sass new file mode 100644 index 00000000000..ace29c476d5 --- /dev/null +++ b/app/javascript/stylesheets/welcome/_side-filter.sass @@ -0,0 +1,12 @@ +.side-filter__item-link + display: flex + padding: .75rem + +text-block(.875rem 1.4) + overflow: hidden + .side-filter__item:not(:last-child) & + border-bottom: solid 1px var(--border-tint) + &.is-active + background-color: var(--warning) + pointer-events: none + text-decoration: none + color: var(--default-text) diff --git a/app/views/admin/faqs/edit.html.slim b/app/views/admin/faqs/edit.html.slim index 76e7e5b8e06..43ce6c870bb 100644 --- a/app/views/admin/faqs/edit.html.slim +++ b/app/views/admin/faqs/edit.html.slim @@ -13,8 +13,6 @@ header.page-header | FAQ編集 = render 'admin/admin_page_tabs' -hr.a-border-tint - .page-main .page-main-header .container diff --git a/app/views/admin/faqs/show.html.slim b/app/views/admin/faqs/show.html.slim index 6cfdcdbfcce..630ccc808bf 100644 --- a/app/views/admin/faqs/show.html.slim +++ b/app/views/admin/faqs/show.html.slim @@ -13,7 +13,7 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title - | FAQ 詳細 + | FAQ .page-main-header__end .page-main-header-actions ul.page-main-header-actions__items diff --git a/app/views/welcome/_faq_tabs.html.slim b/app/views/welcome/_faq_tabs.html.slim index d630a8eee2a..788c70dd275 100644 --- a/app/views/welcome/_faq_tabs.html.slim +++ b/app/views/welcome/_faq_tabs.html.slim @@ -1,26 +1,26 @@ -.page-tabs - .container - ul.page-tabs__items - li.page-tabs__item - = link_to '全て', faq_path - li.page-tabs__item - = link_to '学習内容について', - faq_path(category: 'study_content') - li.page-tabs__item - = link_to '学習環境について', - faq_path(category: 'study_environment') - li.page-tabs__item - = link_to '利用料について', - faq_path(category: 'fee') - li.page-tabs__item - = link_to '就職について', - faq_path(category: 'find_job') - li.page-tabs__item - = link_to '入会について', - faq_path(category: 'join') - li.page-tabs__item - = link_to '退会、休会、卒業について', - faq_path(category: 'withdrawal_hibernation_graduation') - li.page-tabs__item - = link_to '法人利用について', - faq_path(category: 'corporate_use') +.side-filter.a-card + ul.side-filter__items + li.side-filter__item + = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do + | 全て + li.side-filter__item + = link_to faq_path(category: 'study_content', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'study_content' ? 'is-active' : ''}" do + | 学習内容について + li.side-filter__item + = link_to faq_path(category: 'study_environment', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'study_environment' ? 'is-active' : ''}" do + | 学習環境について + li.side-filter__item + = link_to faq_path(category: 'fee', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'fee' ? 'is-active' : ''}" do + | 利用料について + li.side-filter__item + = link_to faq_path(category: 'find_job', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'find_job' ? 'is-active' : ''}" do + | 就職について + li.side-filter__item + = link_to faq_path(category: 'join', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'join' ? 'is-active' : ''}" do + | 入会について + li.side-filter__item + = link_to faq_path(category: 'withdrawal_hibernation_graduation', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'withdrawal_hibernation_graduation' ? 'is-active' : ''}" do + | 退会、休会、卒業について + li.side-filter__item + = link_to faq_path(category: 'corporate_use', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'corporate_use' ? 'is-active' : ''}" do + | 法人利用について From ec5896684c0dc67f26e75961b79277c6f246e4ae Mon Sep 17 00:00:00 2001 From: machida Date: Thu, 9 May 2024 14:44:03 +0900 Subject: [PATCH 075/101] =?UTF-8?q?FAQ=E3=81=AB=E3=83=87=E3=82=B6=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=92=E5=85=A5=E3=82=8C=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stylesheets/_common-imports.sass | 26 ++++++++++++ app/javascript/stylesheets/application.sass | 26 ------------ .../blocks/form/_block-checks.sass | 0 .../blocks/form/_books-form-item.sass | 0 .../blocks/form/_books-form.sass | 0 .../blocks/form/_checkboxes.sass | 7 ++++ .../blocks/form/_form-actions.sass | 0 .../blocks/form/_form-added-choice.sass | 0 .../blocks/form/_form-item-actions.sass | 0 .../blocks/form/_form-item-block.sass | 0 .../blocks/form/_form-item-group.sass | 0 .../blocks/form/_form-item.sass | 0 .../blocks/form/_form-link-block.sass | 0 .../blocks/form/_form-notice.sass | 0 .../blocks/form/_form-selects.sass | 0 .../blocks/form/_form-tabs-item.sass | 0 .../blocks/form/_form-tabs.sass | 0 .../blocks/form/_form-textarea.sass | 0 .../blocks/form/_form-times.sass | 0 .../blocks/form/_form.sass | 0 .../blocks/form/_hidden-form-item.sass | 0 .../blocks/form/_important-message.sass | 0 .../blocks/form/_linear-scale.sass | 0 .../blocks/form/_many-check-boxes.sass | 0 .../blocks/form/_markdown-form.sass | 0 .../blocks/form/_radios.sass | 0 .../blocks/form/_vue-tags-input.sass | 0 app/views/admin/faqs/_form.html.slim | 9 ++-- app/views/welcome/_faqs_item.html.slim | 12 ++++++ .../welcome/_faqs_mobile_filter.html.slim | 10 +++++ ...bs.html.slim => _faqs_pc_filter.html.slim} | 0 app/views/welcome/faq.html.slim | 42 +++++++++++++++---- 32 files changed, 94 insertions(+), 38 deletions(-) rename app/javascript/stylesheets/{application => shared}/blocks/form/_block-checks.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_books-form-item.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_books-form.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_checkboxes.sass (87%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-actions.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-added-choice.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-item-actions.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-item-block.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-item-group.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-item.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-link-block.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-notice.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-selects.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-tabs-item.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-tabs.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-textarea.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form-times.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_form.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_hidden-form-item.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_important-message.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_linear-scale.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_many-check-boxes.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_markdown-form.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_radios.sass (100%) rename app/javascript/stylesheets/{application => shared}/blocks/form/_vue-tags-input.sass (100%) create mode 100644 app/views/welcome/_faqs_item.html.slim create mode 100644 app/views/welcome/_faqs_mobile_filter.html.slim rename app/views/welcome/{_faq_tabs.html.slim => _faqs_pc_filter.html.slim} (100%) diff --git a/app/javascript/stylesheets/_common-imports.sass b/app/javascript/stylesheets/_common-imports.sass index d3dc822c4f5..e416f535afc 100644 --- a/app/javascript/stylesheets/_common-imports.sass +++ b/app/javascript/stylesheets/_common-imports.sass @@ -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" diff --git a/app/javascript/stylesheets/application.sass b/app/javascript/stylesheets/application.sass index a50a26c4b39..e0590a1cef2 100644 --- a/app/javascript/stylesheets/application.sass +++ b/app/javascript/stylesheets/application.sass @@ -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 diff --git a/app/javascript/stylesheets/application/blocks/form/_block-checks.sass b/app/javascript/stylesheets/shared/blocks/form/_block-checks.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_block-checks.sass rename to app/javascript/stylesheets/shared/blocks/form/_block-checks.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_books-form-item.sass b/app/javascript/stylesheets/shared/blocks/form/_books-form-item.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_books-form-item.sass rename to app/javascript/stylesheets/shared/blocks/form/_books-form-item.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_books-form.sass b/app/javascript/stylesheets/shared/blocks/form/_books-form.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_books-form.sass rename to app/javascript/stylesheets/shared/blocks/form/_books-form.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_checkboxes.sass b/app/javascript/stylesheets/shared/blocks/form/_checkboxes.sass similarity index 87% rename from app/javascript/stylesheets/application/blocks/form/_checkboxes.sass rename to app/javascript/stylesheets/shared/blocks/form/_checkboxes.sass index 6c64a4abac2..02d95991e4c 100644 --- a/app/javascript/stylesheets/application/blocks/form/_checkboxes.sass +++ b/app/javascript/stylesheets/shared/blocks/form/_checkboxes.sass @@ -51,3 +51,10 @@ $checkbox-size: .875rem input:checked + label::after, .is-dammy label::after opacity: 1 + + &.is-radio label::before + border-radius: 50% + &.is-radio input:checked + label::before, + &.is-radio .is-dammy label::before + content: '' + box-shadow: 0 0 0 2px inset var(--base) diff --git a/app/javascript/stylesheets/application/blocks/form/_form-actions.sass b/app/javascript/stylesheets/shared/blocks/form/_form-actions.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-actions.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-actions.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-added-choice.sass b/app/javascript/stylesheets/shared/blocks/form/_form-added-choice.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-added-choice.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-added-choice.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-item-actions.sass b/app/javascript/stylesheets/shared/blocks/form/_form-item-actions.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-item-actions.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-item-actions.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-item-block.sass b/app/javascript/stylesheets/shared/blocks/form/_form-item-block.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-item-block.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-item-block.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-item-group.sass b/app/javascript/stylesheets/shared/blocks/form/_form-item-group.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-item-group.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-item-group.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-item.sass b/app/javascript/stylesheets/shared/blocks/form/_form-item.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-item.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-item.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-link-block.sass b/app/javascript/stylesheets/shared/blocks/form/_form-link-block.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-link-block.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-link-block.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-notice.sass b/app/javascript/stylesheets/shared/blocks/form/_form-notice.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-notice.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-notice.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-selects.sass b/app/javascript/stylesheets/shared/blocks/form/_form-selects.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-selects.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-selects.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-tabs-item.sass b/app/javascript/stylesheets/shared/blocks/form/_form-tabs-item.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-tabs-item.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-tabs-item.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-tabs.sass b/app/javascript/stylesheets/shared/blocks/form/_form-tabs.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-tabs.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-tabs.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-textarea.sass b/app/javascript/stylesheets/shared/blocks/form/_form-textarea.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-textarea.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-textarea.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form-times.sass b/app/javascript/stylesheets/shared/blocks/form/_form-times.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form-times.sass rename to app/javascript/stylesheets/shared/blocks/form/_form-times.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_form.sass b/app/javascript/stylesheets/shared/blocks/form/_form.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_form.sass rename to app/javascript/stylesheets/shared/blocks/form/_form.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_hidden-form-item.sass b/app/javascript/stylesheets/shared/blocks/form/_hidden-form-item.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_hidden-form-item.sass rename to app/javascript/stylesheets/shared/blocks/form/_hidden-form-item.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_important-message.sass b/app/javascript/stylesheets/shared/blocks/form/_important-message.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_important-message.sass rename to app/javascript/stylesheets/shared/blocks/form/_important-message.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_linear-scale.sass b/app/javascript/stylesheets/shared/blocks/form/_linear-scale.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_linear-scale.sass rename to app/javascript/stylesheets/shared/blocks/form/_linear-scale.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_many-check-boxes.sass b/app/javascript/stylesheets/shared/blocks/form/_many-check-boxes.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_many-check-boxes.sass rename to app/javascript/stylesheets/shared/blocks/form/_many-check-boxes.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_markdown-form.sass b/app/javascript/stylesheets/shared/blocks/form/_markdown-form.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_markdown-form.sass rename to app/javascript/stylesheets/shared/blocks/form/_markdown-form.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_radios.sass b/app/javascript/stylesheets/shared/blocks/form/_radios.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_radios.sass rename to app/javascript/stylesheets/shared/blocks/form/_radios.sass diff --git a/app/javascript/stylesheets/application/blocks/form/_vue-tags-input.sass b/app/javascript/stylesheets/shared/blocks/form/_vue-tags-input.sass similarity index 100% rename from app/javascript/stylesheets/application/blocks/form/_vue-tags-input.sass rename to app/javascript/stylesheets/shared/blocks/form/_vue-tags-input.sass diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index 82bbd2267d4..f31b68cd2ca 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -18,9 +18,12 @@ = render 'errors', object: faq label.a-form-label | カテゴリー - - FAQ.categories.each_key do |category| - = f.radio_button :category, FAQ.categories[:"#{category}"] - = f.label :category, t("faq.#{category}"), value: FAQ.categories[:"#{category}"] + .checkboxes + .checkboxes__items + - FAQ.categories.each_key do |category| + .checkboxes__item.is-radio + = f.radio_button :category, FAQ.categories[:"#{category}"] + = f.label :category, t("faq.#{category}"), value: FAQ.categories[:"#{category}"] .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/welcome/_faqs_item.html.slim b/app/views/welcome/_faqs_item.html.slim new file mode 100644 index 00000000000..de7f4040445 --- /dev/null +++ b/app/views/welcome/_faqs_item.html.slim @@ -0,0 +1,12 @@ +section.faqs-item + .faqs-item__inner + h3.faqs-item__title + = format_question(faq.question) + hr.a-border-tint + .faqs-item__body + .a-long-text.is-md.js-markdown-view + = faq.answer + - if admin_login? + p + = link_to edit_admin_faq_path(faq) do + | 編集 diff --git a/app/views/welcome/_faqs_mobile_filter.html.slim b/app/views/welcome/_faqs_mobile_filter.html.slim new file mode 100644 index 00000000000..be11ab4a59a --- /dev/null +++ b/app/views/welcome/_faqs_mobile_filter.html.slim @@ -0,0 +1,10 @@ +.faqs__filter.is-hidden-md-up + .container.is-xs + .form-item.is-inline + label.a-form-label + | 絞り込む + .a-button.is-md.is-secondary.is-select.is-block + select + - %i[all study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| + option + = category diff --git a/app/views/welcome/_faq_tabs.html.slim b/app/views/welcome/_faqs_pc_filter.html.slim similarity index 100% rename from app/views/welcome/_faq_tabs.html.slim rename to app/views/welcome/_faqs_pc_filter.html.slim diff --git a/app/views/welcome/faq.html.slim b/app/views/welcome/faq.html.slim index 19f06bf3e38..acef01edce0 100644 --- a/app/views/welcome/faq.html.slim +++ b/app/views/welcome/faq.html.slim @@ -3,12 +3,36 @@ - set_meta_tags(site: 'FJORD BOOT CAMP(フィヨルドブートキャンプ)', description: 'フィヨルドブートキャンプに寄せられたよくあるお問い合わせとその回答の一覧です。') -header.lp-page-header - .l-container - .lp-page-header__inner - .lp-page-header__start - h1.lp-page-header__title - | FAQ - .lp-page-header__end -hr.a-border-tint -= render 'faq' +header.welcome-page-header + .container.is-xl + .welcome-page-header__inner + h1.welcome-page-header__title + | FAQ +.welcome-sections + section.welcome-section.is-faq#faq + .container.is-lg + h2.welcome-section__title + | FAQ + - if params[:category].present? + span.ml-4.is-hidden-sm-down + | 「#{I18n.t(params[:category])}」 + .welcome-section__description + .container.is-lg + p + | わからないこと、気になることがありましたら、 + = link_to new_inquiry_path, class: 'welcome-section__description-link' do + | こちら + | から質問してください。 + + .faqs#faqs + = render 'faqs_mobile_filter' + .faqs__main + .container.is-lg + .faqs__row + .faqs__start.is-hidden-sm-down + .faqs__nav + = render 'faqs_pc_filter' + .faqs__end + .faqs__items + - @faqs.each do |faq| + = render 'faqs_item', faq: faq From 3b091a67b3a1174a6862b5b6561dec4f4bd5c2f6 Mon Sep 17 00:00:00 2001 From: machida Date: Thu, 9 May 2024 15:03:17 +0900 Subject: [PATCH 076/101] =?UTF-8?q?FAQ=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?=E7=B4=B0=E3=81=8B=E3=81=84=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faqs/_table.html.slim | 6 ++--- app/views/welcome/faq.html.slim | 25 ++++++++++++------- .../welcome/{ => faqs}/_faqs_item.html.slim | 0 .../{ => faqs}/_faqs_mobile_filter.html.slim | 4 ++- .../{ => faqs}/_faqs_pc_filter.html.slim | 0 5 files changed, 22 insertions(+), 13 deletions(-) rename app/views/welcome/{ => faqs}/_faqs_item.html.slim (100%) rename app/views/welcome/{ => faqs}/_faqs_mobile_filter.html.slim (63%) rename app/views/welcome/{ => faqs}/_faqs_pc_filter.html.slim (100%) diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim index ec5e2b3d615..65a80a5e1bf 100644 --- a/app/views/admin/faqs/_table.html.slim +++ b/app/views/admin/faqs/_table.html.slim @@ -5,8 +5,8 @@ th.admin-table__label 質問 th.admin-table__label 回答 th.admin-table__label 編集 - th.admin-table__label 並び順 th.admin-table__label カテゴリ + th.admin-table__label 並び順 tbody.admin-table__items#js-faq-sortable - faqs.each do |faq| tr.admin-table__item(id="faq_#{faq.id}") @@ -18,8 +18,8 @@ td.admin-table__item-value.is-text-align-center = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen + td.admin-table__item-value.is-text-align-center + = t("faq.#{faq.category}") td.admin-table__item-value.is-text-align-center.is-grab span.js-grab.a-grab i.fa-solid.fa-align-justify - td.admin-table__item-value.is-text-align-center - = t("faq.#{faq.category}") diff --git a/app/views/welcome/faq.html.slim b/app/views/welcome/faq.html.slim index acef01edce0..0fd688a4d66 100644 --- a/app/views/welcome/faq.html.slim +++ b/app/views/welcome/faq.html.slim @@ -6,16 +6,23 @@ header.welcome-page-header .container.is-xl .welcome-page-header__inner - h1.welcome-page-header__title - | FAQ -.welcome-sections - section.welcome-section.is-faq#faq + .welcome-page-header__start + h1.welcome-page-header__title + | FAQ + - if current_user&.mentor? + .welcome-page-header__end + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fas.fa-plus + | FAQ追加 + +.welcome-sections#faqs + section.welcome-section.is-faq .container.is-lg h2.welcome-section__title | FAQ - if params[:category].present? span.ml-4.is-hidden-sm-down - | 「#{I18n.t(params[:category])}」 + | 「#{t("faq.#{params[:category]}")}」 .welcome-section__description .container.is-lg p @@ -24,15 +31,15 @@ header.welcome-page-header | こちら | から質問してください。 - .faqs#faqs - = render 'faqs_mobile_filter' + .faqs + = render '/welcome/faqs/faqs_mobile_filter' .faqs__main .container.is-lg .faqs__row .faqs__start.is-hidden-sm-down .faqs__nav - = render 'faqs_pc_filter' + = render '/welcome/faqs/faqs_pc_filter' .faqs__end .faqs__items - @faqs.each do |faq| - = render 'faqs_item', faq: faq + = render '/welcome/faqs/faqs_item', faq: faq diff --git a/app/views/welcome/_faqs_item.html.slim b/app/views/welcome/faqs/_faqs_item.html.slim similarity index 100% rename from app/views/welcome/_faqs_item.html.slim rename to app/views/welcome/faqs/_faqs_item.html.slim diff --git a/app/views/welcome/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim similarity index 63% rename from app/views/welcome/_faqs_mobile_filter.html.slim rename to app/views/welcome/faqs/_faqs_mobile_filter.html.slim index be11ab4a59a..ba644c4eb80 100644 --- a/app/views/welcome/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -5,6 +5,8 @@ | 絞り込む .a-button.is-md.is-secondary.is-select.is-block select - - %i[all study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use].each do |category| + option + | 全て + - FAQ.categories.each_key do |category| option = category diff --git a/app/views/welcome/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim similarity index 100% rename from app/views/welcome/_faqs_pc_filter.html.slim rename to app/views/welcome/faqs/_faqs_pc_filter.html.slim From 608a48c82a5d3a7f295af3555db623e5de2258a4 Mon Sep 17 00:00:00 2001 From: machida Date: Fri, 10 May 2024 02:21:55 +0900 Subject: [PATCH 077/101] =?UTF-8?q?radio=20input=20=E3=82=92=E9=9A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/faqs/_form.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index f31b68cd2ca..83919dd7a0a 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -22,7 +22,7 @@ .checkboxes__items - FAQ.categories.each_key do |category| .checkboxes__item.is-radio - = f.radio_button :category, FAQ.categories[:"#{category}"] + = f.radio_button :category, FAQ.categories[:"#{category}"], class: 'a-toggle-checkbox' = f.label :category, t("faq.#{category}"), value: FAQ.categories[:"#{category}"] .form-actions ul.form-actions__items From ff3c38e716a87fe5748f600cc86275a581783878 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Fri, 10 May 2024 18:37:28 +0900 Subject: [PATCH 078/101] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E8=A8=98?= =?UTF-8?q?=E8=BF=B0=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 8a501872cf2..f5e2dffd81f 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -18,7 +18,7 @@ def pricing; end def faq category_id = FAQ.categories[:"#{params[:category]}"] @faqs = if params[:category].present? - FAQ.where(category: category_id) if category_id.present? + FAQ.where(category: category_id) else FAQ.all end From ac682c7a8e66c0839a5dec4d48abd41b08ce7ed7 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 21 May 2024 17:18:02 +0900 Subject: [PATCH 079/101] =?UTF-8?q?=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=BD=B1=E9=9F=BF=E3=81=A7=E9=80=9A=E3=82=89?= =?UTF-8?q?=E3=81=AA=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/admin/faq_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/system/admin/faq_test.rb b/test/system/admin/faq_test.rb index 060d736d475..85b25da51d4 100644 --- a/test/system/admin/faq_test.rb +++ b/test/system/admin/faq_test.rb @@ -13,7 +13,7 @@ class Admin::FAQTest < ApplicationSystemTestCase within 'form[name=faq]' do fill_in 'faq[question]', with: 'test FAQ' fill_in 'faq[answer]', with: 'test FAQ' - choose '学習内容について' + find('label', text: '学習内容について').click click_button '登録する' end assert_text 'FAQを作成しました。' @@ -24,7 +24,7 @@ class Admin::FAQTest < ApplicationSystemTestCase within 'form[name=faq]' do fill_in 'faq[question]', with: 'updated FAQ' fill_in 'faq[answer]', with: 'updated FAQ' - choose '学習内容について' + find('label', text: '学習内容について').click click_button '更新する' end assert_text 'FAQを更新しました。' From 4b0858d700499f15fbaab2a1dd2ee90071e3e16b Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 21 May 2024 18:08:41 +0900 Subject: [PATCH 080/101] =?UTF-8?q?admin=E5=81=B4=E3=81=AEFAQ=E3=81=AEshow?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 2 +- app/views/admin/faqs/edit.html.slim | 6 +-- app/views/admin/faqs/show.html.slim | 68 ------------------------ 3 files changed, 2 insertions(+), 74 deletions(-) delete mode 100644 app/views/admin/faqs/show.html.slim diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index 63866da39e4..cd8637a1e27 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -26,7 +26,7 @@ def edit; end def update if @faq.update(faq_params.merge(category: faq_params[:category].to_i)) - redirect_to admin_faq_path(@faq), notice: 'FAQを更新しました。' + redirect_to admin_faqs_path, notice: 'FAQを更新しました。' else render 'edit' end diff --git a/app/views/admin/faqs/edit.html.slim b/app/views/admin/faqs/edit.html.slim index 43ce6c870bb..b9b6c129018 100644 --- a/app/views/admin/faqs/edit.html.slim +++ b/app/views/admin/faqs/edit.html.slim @@ -24,11 +24,7 @@ header.page-header .page-header-actions .page-header-actions__items .page-header-actions__item - = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do - i.fa-regular.fa-plus - | FAQ追加 - .page-header-actions__item - = link_to admin_faq_path, class: 'a-button is-md is-secondary is-block is-back' do + = link_to admin_faqs_path, class: 'a-button is-md is-secondary is-block is-back' do | FAQ一覧 hr.a-border = render 'admin/admin_page_tabs' diff --git a/app/views/admin/faqs/show.html.slim b/app/views/admin/faqs/show.html.slim deleted file mode 100644 index 630ccc808bf..00000000000 --- a/app/views/admin/faqs/show.html.slim +++ /dev/null @@ -1,68 +0,0 @@ -- title '管理ページ' - -header.page-header - .container - .page-header__inner - h1.page-header__title = title - -= render 'admin/admin_page_tabs' - -main.page-main - header.page-main-header - .container - .page-main-header__inner - .page-main-header__start - h1.page-main-header__title - | FAQ - .page-main-header__end - .page-main-header-actions - ul.page-main-header-actions__items - li.page-main-header-actions__item - = link_to admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back is-back' do - | FAQ一覧 - hr.a-border - .page-body - .container.is-xxl - .row.justify-center - .col-xl-7.col-xs-12 - .page-content - header.page-content-header - // - .page-content-header__start - .page-content-header__user - = render 'users/icon', user: @faq.user, link_class: 'page-content-header__user-link', image_class: 'page-content-header__user-icon' - .page-content-header__end - .page-content-header__row - // - .page-content-header__before-title - = link_to @faq.user, class: 'a-user-name' do - = @faq.user.long_name - h1.page-content-header__title - = format_question(@faq.question) - - .page-content-header__row - .page-content-header-metas - .page-content-header-metas__start - .page-content-header-metas__meta - .a-meta - | #{l @faq.created_at} 公開 - - .page-content-header__row - .page-content-header-metas - .page-content-header-metas__start - .page-content-header-metas__meta - .a-meta - = t("faq.#{@faq.category}") - - .a-card - .card-body - .card__description - .js-markdown-view.a-long-text.is-md - = @faq.answer - .card-footer - .card-main-actions - .card-main-actions__items - .card-main-actions__item - = link_to edit_admin_faq_path(@faq), class: 'card-main-actions__action a-button is-sm is-secondary is-block' do - i.fa-solid.fa-pen - | 内容修正 From 855db3f1eee9358c34948bf297b1f4ffea03fb2c Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 22 May 2024 10:31:48 +0900 Subject: [PATCH 081/101] =?UTF-8?q?FAQ=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE?= =?UTF-8?q?=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA=E3=82=BF=E3=83=96=E3=82=92?= =?UTF-8?q?each=E6=96=87=E3=81=A7=E7=B0=A1=E7=95=A5=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../welcome/faqs/_faqs_pc_filter.html.slim | 26 ++++--------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index 788c70dd275..ac9c9920b78 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -3,24 +3,8 @@ li.side-filter__item = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - li.side-filter__item - = link_to faq_path(category: 'study_content', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'study_content' ? 'is-active' : ''}" do - | 学習内容について - li.side-filter__item - = link_to faq_path(category: 'study_environment', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'study_environment' ? 'is-active' : ''}" do - | 学習環境について - li.side-filter__item - = link_to faq_path(category: 'fee', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'fee' ? 'is-active' : ''}" do - | 利用料について - li.side-filter__item - = link_to faq_path(category: 'find_job', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'find_job' ? 'is-active' : ''}" do - | 就職について - li.side-filter__item - = link_to faq_path(category: 'join', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'join' ? 'is-active' : ''}" do - | 入会について - li.side-filter__item - = link_to faq_path(category: 'withdrawal_hibernation_graduation', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'withdrawal_hibernation_graduation' ? 'is-active' : ''}" do - | 退会、休会、卒業について - li.side-filter__item - = link_to faq_path(category: 'corporate_use', anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == 'corporate_use' ? 'is-active' : ''}" do - | 法人利用について + + - FAQ.categories.keys.each do |category| + li.side-filter__item + = link_to faq_path(category: category, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do + = t("faq.#{category}") From c6c51c6a26d44485dc721ad198026c960fd49cde Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 22 May 2024 10:47:44 +0900 Subject: [PATCH 082/101] =?UTF-8?q?lint=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=82=92=E8=A7=A3=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/welcome/faqs/_faqs_pc_filter.html.slim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index ac9c9920b78..79ead87b16c 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,7 +4,7 @@ = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - FAQ.categories.keys.each do |category| + - FAQ.categories.each_key do |category| li.side-filter__item = link_to faq_path(category: category, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do = t("faq.#{category}") From 84b519b884207f112b5df3d060a9e9ce07ff1fd9 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Thu, 23 May 2024 16:52:33 +0900 Subject: [PATCH 083/101] =?UTF-8?q?=E3=83=A2=E3=83=90=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8Bselect=E3=82=BF?= =?UTF-8?q?=E3=82=B0=E3=81=AE=E9=81=B8=E6=8A=9E=E8=82=A2=E3=82=92=E6=97=A5?= =?UTF-8?q?=E6=9C=AC=E8=AA=9E=E5=8C=96=E3=80=81=E3=82=AB=E3=83=86=E3=82=B4?= =?UTF-8?q?=E3=83=AA=E3=82=92=E9=81=B8=E6=8A=9E=E3=81=97=E3=81=A6=E3=82=82?= =?UTF-8?q?=E3=80=8C=E5=85=A8=E3=81=A6=E3=80=8D=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=81=BE=E3=81=BE=E3=81=A0=E3=81=A3=E3=81=9F=E4=B8=8D?= =?UTF-8?q?=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../welcome/faqs/_faqs_mobile_filter.html.slim | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index ba644c4eb80..923a3511880 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -5,8 +5,15 @@ | 絞り込む .a-button.is-md.is-secondary.is-select.is-block select - option - | 全て - - FAQ.categories.each_key do |category| + - if params[:category].present? option - = category + | 全て + option(selected="selected") + = t("faq.#{params[:category]}") + - else + option(selected="selected") + | 全て + - FAQ.categories.each_key do |category| + - if params[:category] != category + option + = t("faq.#{category}") From 8a509fb254424fd130937ebf32369d7df21c4cbd Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 29 May 2024 20:39:34 +0900 Subject: [PATCH 084/101] =?UTF-8?q?=E3=82=BB=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=82=BF=E3=83=96=E3=81=A7=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA?= =?UTF-8?q?=E9=81=B8=E6=8A=9E=E3=81=99=E3=82=8B=E3=81=A8=E3=80=81=E5=8D=B3?= =?UTF-8?q?=E5=BA=A7=E3=81=AB=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=8C=E5=88=87?= =?UTF-8?q?=E3=82=8A=E6=9B=BF=E3=82=8F=E3=82=8B=E3=82=88=E3=81=86=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../faqs/_faqs_mobile_filter.html.slim | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index 923a3511880..45c7715968f 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -3,17 +3,14 @@ .form-item.is-inline label.a-form-label | 絞り込む - .a-button.is-md.is-secondary.is-select.is-block - select - - if params[:category].present? - option - | 全て - option(selected="selected") - = t("faq.#{params[:category]}") - - else - option(selected="selected") - | 全て + = form_with url: faq_path, method: :get, local: true, html: { class: 'a-button is-md is-secondary is-select is-block' } do + select name="category" onchange="this.form.submit()" + option value="" + | 全て - FAQ.categories.each_key do |category| - - if params[:category] != category - option + - if params[:category] == category + option value=category selected=true + = t("faq.#{category}") + - else + option value=category = t("faq.#{category}") From fa010f84696d74b40537c48529288ea22cec5534 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Sun, 21 Jul 2024 00:58:01 +0900 Subject: [PATCH 085/101] =?UTF-8?q?enum=E5=89=8A=E9=99=A4=E3=80=81faq=5Fca?= =?UTF-8?q?tegory=E3=83=A2=E3=83=87=E3=83=AB=E3=82=92=E4=BD=BF=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E5=87=A6=E7=90=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 17 ++++-- app/controllers/welcome_controller.rb | 4 +- app/models/faq.rb | 15 +---- app/models/faqs_category.rb | 6 ++ app/views/admin/faqs/_form.html.slim | 7 +-- app/views/admin/faqs/_table.html.slim | 2 +- .../faqs/_faqs_mobile_filter.html.slim | 2 +- .../welcome/faqs/_faqs_pc_filter.html.slim | 6 +- db/fixtures/faqs.yml | 42 ++++++------- db/fixtures/faqs_categories.yml | 41 +++++++++++++ ...0507123850_remove_foreign_key_from_faqs.rb | 5 -- ...931_change_faqs_category_id_to_category.rb | 6 -- ...reign_key_from_faqs_and_faqs_categories.rb | 5 -- .../20240507171015_drop_faqs_categories.rb | 5 -- db/schema.rb | 59 ++++++++++--------- db/seeds.rb | 1 + 16 files changed, 123 insertions(+), 100 deletions(-) create mode 100644 app/models/faqs_category.rb create mode 100644 db/fixtures/faqs_categories.yml delete mode 100644 db/migrate/20240507123850_remove_foreign_key_from_faqs.rb delete mode 100644 db/migrate/20240507125931_change_faqs_category_id_to_category.rb delete mode 100644 db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb delete mode 100644 db/migrate/20240507171015_drop_faqs_categories.rb diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index cd8637a1e27..d8e7c4f5675 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -2,6 +2,8 @@ class Admin::FaqsController < AdminController before_action :set_faq, only: %i[show edit update destroy] + before_action :set_category, only: %i[edit new] + def index @faqs = FAQ.all end @@ -11,7 +13,7 @@ def new end def create - @faq = FAQ.new(faq_params.merge(category: faq_params[:category].to_i)) + @faq = FAQ.new(faq_params) if @faq.save redirect_to admin_faqs_path, notice: 'FAQを作成しました。' @@ -21,12 +23,11 @@ def create end def show; end - def edit; end def update - if @faq.update(faq_params.merge(category: faq_params[:category].to_i)) - redirect_to admin_faqs_path, notice: 'FAQを更新しました。' + if @faq.update(faq_params) + redirect_to admin_faq_path(@faq), notice: 'FAQを更新しました。' else render 'edit' end @@ -40,10 +41,14 @@ def destroy private def faq_params - params.require(:faq).permit(:answer, :question, :category) + params.require(:faq).permit(:answer, :question, :faqs_category_id) end def set_faq @faq = FAQ.find(params[:id]) end -end + + def set_category + @category = %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use] + end +end \ No newline at end of file diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index f5e2dffd81f..44b120efab7 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,9 +16,9 @@ def job_support; end def pricing; end def faq - category_id = FAQ.categories[:"#{params[:category]}"] + category = FaqsCategory.find_by(name: params[:category]) @faqs = if params[:category].present? - FAQ.where(category: category_id) + FAQ.where(faqs_category_id: category.id) if category.present? else FAQ.all end diff --git a/app/models/faq.rb b/app/models/faq.rb index cbf351f22d8..1a13fc8de35 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -1,20 +1,9 @@ # frozen_string_literal: true - class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true - validates :category, presence: true default_scope -> { order(:position) } + belongs_to :faqs_category acts_as_list - - enum category: { - study_content: 0, - study_environment: 1, - fee: 2, - find_job: 3, - join: 4, - withdrawal_hibernation_graduation: 5, - corporate_use: 6 - }, _prefix: true -end +end \ No newline at end of file diff --git a/app/models/faqs_category.rb b/app/models/faqs_category.rb new file mode 100644 index 00000000000..79cd69ed3bf --- /dev/null +++ b/app/models/faqs_category.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class FaqsCategory < ApplicationRecord + validates :name, presence: true, uniqueness: true + has_many :faqs, dependent: :destroy +end diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index 83919dd7a0a..bbd2eaa65e2 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -20,10 +20,9 @@ | カテゴリー .checkboxes .checkboxes__items - - FAQ.categories.each_key do |category| - .checkboxes__item.is-radio - = f.radio_button :category, FAQ.categories[:"#{category}"], class: 'a-toggle-checkbox' - = f.label :category, t("faq.#{category}"), value: FAQ.categories[:"#{category}"] + - @category.each do |category| + = f.radio_button :faqs_category_id, FaqsCategory.find_by(name: category.to_s).id + = f.label :faqs_category_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim index 65a80a5e1bf..d73db2b2dc5 100644 --- a/app/views/admin/faqs/_table.html.slim +++ b/app/views/admin/faqs/_table.html.slim @@ -19,7 +19,7 @@ = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen td.admin-table__item-value.is-text-align-center - = t("faq.#{faq.category}") + = t("faq.#{FaqsCategory.find_by(id: faq.faqs_category_id).name}") td.admin-table__item-value.is-text-align-center.is-grab span.js-grab.a-grab i.fa-solid.fa-align-justify diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index 45c7715968f..4345bd4f957 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -7,7 +7,7 @@ select name="category" onchange="this.form.submit()" option value="" | 全て - - FAQ.categories.each_key do |category| + - FaqsCategory.all.each do |category| - if params[:category] == category option value=category selected=true = t("faq.#{category}") diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index 79ead87b16c..05a1c4f5dc6 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,7 +4,7 @@ = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - FAQ.categories.each_key do |category| + - FaqsCategory.all.each do |category| li.side-filter__item - = link_to faq_path(category: category, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do - = t("faq.#{category}") + = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do + = t("faq.#{category.name}") diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 33b363f87e2..a0117e116ae 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - category: 1 + faqs_category_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - category: 5 + faqs_category_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - category: 1 + faqs_category_id: 2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - category: 5 + faqs_category_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - category: 1 + faqs_category_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - category: 2 + faqs_category_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - category: 1 + faqs_category_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - category: 4 + faqs_category_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - category: 4 + faqs_category_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - category: 4 + faqs_category_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - category: 1 + faqs_category_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - category: 1 + faqs_category_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - category: 1 + faqs_category_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - category: 3 + faqs_category_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - category: 3 + faqs_category_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - category: 4 + faqs_category_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - category: 1 + faqs_category_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - category: 6 + faqs_category_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - category: 5 + faqs_category_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - category: 2 + faqs_category_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - category: 1 + faqs_category_id: 2 diff --git a/db/fixtures/faqs_categories.yml b/db/fixtures/faqs_categories.yml new file mode 100644 index 00000000000..a6d94f121ef --- /dev/null +++ b/db/fixtures/faqs_categories.yml @@ -0,0 +1,41 @@ +faqs_categories1: + id: 1 + name: study_content + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories2: + id: 2 + name: study_environment + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories3: + id: 3 + name: fee + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories4: + id: 4 + name: find_job + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories5: + id: 5 + name: join + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories6: + id: 6 + name: withdrawal_hibernation_graduation + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories7: + id: 7 + name: corporate_use + created_at: <%= Time.current %> + updated_at: <%= Time.current %> diff --git a/db/migrate/20240507123850_remove_foreign_key_from_faqs.rb b/db/migrate/20240507123850_remove_foreign_key_from_faqs.rb deleted file mode 100644 index ddab2551a82..00000000000 --- a/db/migrate/20240507123850_remove_foreign_key_from_faqs.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RemoveForeignKeyFromFaqs < ActiveRecord::Migration[6.1] - def down - remove_foreign_key :faqs, column: :faqs_category_id - end -end diff --git a/db/migrate/20240507125931_change_faqs_category_id_to_category.rb b/db/migrate/20240507125931_change_faqs_category_id_to_category.rb deleted file mode 100644 index 0e9458577eb..00000000000 --- a/db/migrate/20240507125931_change_faqs_category_id_to_category.rb +++ /dev/null @@ -1,6 +0,0 @@ -class ChangeFaqsCategoryIdToCategory < ActiveRecord::Migration[6.1] - def change - rename_column :faqs, :faqs_category_id, :category - change_column :faqs, :category, :integer, null: false - end -end diff --git a/db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb b/db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb deleted file mode 100644 index 8857d477bf5..00000000000 --- a/db/migrate/20240507153241_remove_foreign_key_from_faqs_and_faqs_categories.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RemoveForeignKeyFromFaqsAndFaqsCategories < ActiveRecord::Migration[6.1] - def change - remove_foreign_key :faqs, :faqs_categories - end -end diff --git a/db/migrate/20240507171015_drop_faqs_categories.rb b/db/migrate/20240507171015_drop_faqs_categories.rb deleted file mode 100644 index 2aef30ca91a..00000000000 --- a/db/migrate/20240507171015_drop_faqs_categories.rb +++ /dev/null @@ -1,5 +0,0 @@ -class DropFaqsCategories < ActiveRecord::Migration[6.1] - def change - drop_table :faqs_categories - end -end diff --git a/db/schema.rb b/db/schema.rb index 32685740599..30ceb56e767 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -126,8 +126,8 @@ end create_table "categories", id: :serial, force: :cascade do |t| - t.string "name", limit: 255 - t.string "slug", limit: 255 + t.string "name" + t.string "slug" t.datetime "created_at" t.datetime "updated_at" t.text "description" @@ -181,14 +181,13 @@ t.datetime "updated_at" t.string "commentable_type", default: "Report" t.index ["commentable_id"], name: "index_comments_on_commentable_id" - t.index ["user_id"], name: "comment_user_id" t.index ["user_id"], name: "index_comments_on_user_id" end create_table "companies", id: :serial, force: :cascade do |t| - t.string "name", limit: 255 + t.string "name" t.text "description" - t.string "website", limit: 255 + t.string "website" t.datetime "created_at" t.datetime "updated_at" t.text "tos" @@ -228,9 +227,6 @@ t.index ["course_id", "category_id"], name: "index_courses_categories_on_course_id_and_category_id", unique: true end - create_table "data_migrations", primary_key: "version", id: :string, force: :cascade do |t| - end - create_table "discord_profiles", force: :cascade do |t| t.bigint "user_id" t.string "account_name" @@ -277,12 +273,19 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.integer "category", null: false + t.bigint "faqs_category_id", null: false t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true - t.index ["category"], name: "index_faqs_on_category" + t.index ["faqs_category_id"], name: "index_faqs_on_faqs_category_id" t.index ["question"], name: "index_faqs_on_question", unique: true end + create_table "faqs_categories", force: :cascade do |t| + t.string "name", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["name"], name: "index_faqs_categories_on_name", unique: true + end + create_table "followings", force: :cascade do |t| t.integer "follower_id" t.integer "followed_id" @@ -570,8 +573,8 @@ t.integer "kind", default: 0, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["reactionable_type", "reactionable_id"], name: "index_reactions_on_reactionable_type_and_reactionable_id" - t.index ["user_id", "reactionable_id", "reactionable_type", "kind"], name: "index_reactions_on_reactionable", unique: true + t.index ["reactionable_type", "reactionable_id"], name: "index_reactions_on_reactionable" + t.index ["user_id", "reactionable_id", "reactionable_type", "kind"], name: "index_reactions_on_reactionable_u_k", unique: true t.index ["user_id"], name: "index_reactions_on_user_id" end @@ -602,9 +605,9 @@ t.boolean "hold_national_holiday", null: false t.time "start_at", null: false t.time "end_at", null: false + t.boolean "wip", default: false, null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false - t.boolean "wip", default: false, null: false t.integer "category", default: 0, null: false t.boolean "all", default: false, null: false t.datetime "published_at" @@ -632,7 +635,6 @@ t.index ["created_at"], name: "index_reports_on_created_at" t.index ["user_id", "reported_on"], name: "index_reports_on_user_id_and_reported_on", unique: true t.index ["user_id", "title"], name: "index_reports_on_user_id_and_title", unique: true - t.index ["user_id"], name: "reports_user_id" end create_table "request_retirements", force: :cascade do |t| @@ -720,21 +722,21 @@ end create_table "users", id: :serial, force: :cascade do |t| - t.string "login_name", limit: 255, null: false - t.string "email", limit: 255 - t.string "crypted_password", limit: 255 - t.string "salt", limit: 255 + t.string "login_name", null: false + t.string "email" + t.string "crypted_password" + t.string "salt" t.datetime "created_at" t.datetime "updated_at" - t.string "remember_me_token", limit: 255 + t.string "remember_me_token" t.datetime "remember_me_token_expires_at" - t.string "twitter_account", limit: 255 - t.string "facebook_url", limit: 255 - t.string "blog_url", limit: 255 + t.string "twitter_account" + t.string "facebook_url" + t.string "blog_url" t.integer "company_id" t.text "description" t.datetime "accessed_at" - t.string "github_account", limit: 255 + t.string "github_account" t.boolean "adviser", default: false, null: false t.boolean "nda", default: true, null: false t.string "reset_password_token" @@ -756,13 +758,13 @@ t.string "subscription_id" t.boolean "mail_notification", default: true, null: false t.boolean "job_seeker", default: false, null: false - t.boolean "github_collaborator", default: false, null: false t.string "github_id" + t.boolean "github_collaborator", default: false, null: false + t.string "name", default: "", null: false + t.string "name_kana", default: "", null: false t.integer "satisfaction" t.text "opinion" t.bigint "retire_reasons", default: 0, null: false - t.string "name", default: "", null: false - t.string "name_kana", default: "", null: false t.string "unsubscribe_email_token" t.text "mentor_memo" t.text "after_graduation_hope" @@ -779,9 +781,9 @@ t.string "country_code" t.string "subdivision_code" t.boolean "auto_retire", default: true - t.boolean "invoice_payment", default: false, null: false t.integer "editor" t.string "other_editor" + t.boolean "invoice_payment", default: false, null: false t.boolean "hide_mentor_profile", default: false, null: false t.integer "experiences", default: 0, null: false t.index ["course_id"], name: "index_users_on_course_id" @@ -799,7 +801,7 @@ t.datetime "updated_at", null: false t.integer "user_id", null: false t.index ["watchable_type", "watchable_id", "user_id"], name: "index_watches_on_watchable_type_and_watchable_id_and_user_id", unique: true - t.index ["watchable_type", "watchable_id"], name: "index_watches_on_watchable_type_and_watchable_id" + t.index ["watchable_type", "watchable_id"], name: "index_watches_on_watchable" end create_table "works", force: :cascade do |t| @@ -826,6 +828,7 @@ add_foreign_key "check_boxes", "survey_questions" add_foreign_key "discord_profiles", "users" add_foreign_key "external_entries", "users" + add_foreign_key "faqs", "faqs_categories" add_foreign_key "hibernations", "users" add_foreign_key "images", "users" add_foreign_key "learning_minute_statistics", "practices" diff --git a/db/seeds.rb b/db/seeds.rb index 93f339af5f4..f5e0688cf83 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -26,6 +26,7 @@ events external_entries faqs + faqs_categories followings reports learning_times From ab1dc78418694a4d6bc7d634a4ca2cc365510dc5 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 29 Jul 2024 17:03:52 +0900 Subject: [PATCH 086/101] =?UTF-8?q?enum=E5=89=8A=E9=99=A4=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6test=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 4 +-- test/fixtures/faqs.yml | 42 ++++++++++++------------ test/fixtures/faqs_categories.yml | 41 +++++++++++++++++++++++ test/models/faq_test.rb | 2 +- test/system/faq_test.rb | 3 +- 5 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 test/fixtures/faqs_categories.yml diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index d8e7c4f5675..0acaaed2f26 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -2,7 +2,7 @@ class Admin::FaqsController < AdminController before_action :set_faq, only: %i[show edit update destroy] - before_action :set_category, only: %i[edit new] + before_action :set_category, only: %i[edit new update create] def index @faqs = FAQ.all @@ -27,7 +27,7 @@ def edit; end def update if @faq.update(faq_params) - redirect_to admin_faq_path(@faq), notice: 'FAQを更新しました。' + redirect_to admin_faqs_path, notice: 'FAQを更新しました。' else render 'edit' end diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index a66b834af54..000ccf0d449 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - category: 1 + faqs_category_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - category: 5 + faqs_category_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - category: 1 + faqs_category_id: 2 faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 - category: 5 + faqs_category_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - category: 1 + faqs_category_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - category: 2 + faqs_category_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - category: 1 + faqs_category_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - category: 4 + faqs_category_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - category: 4 + faqs_category_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 - category: 4 + faqs_category_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - category: 1 + faqs_category_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - category: 1 + faqs_category_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - category: 1 + faqs_category_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - category: 3 + faqs_category_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - category: 3 + faqs_category_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - category: 4 + faqs_category_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - category: 1 + faqs_category_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - category: 6 + faqs_category_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - category: 5 + faqs_category_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - category: 2 + faqs_category_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - category: 1 + faqs_category_id: 2 diff --git a/test/fixtures/faqs_categories.yml b/test/fixtures/faqs_categories.yml new file mode 100644 index 00000000000..a6d94f121ef --- /dev/null +++ b/test/fixtures/faqs_categories.yml @@ -0,0 +1,41 @@ +faqs_categories1: + id: 1 + name: study_content + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories2: + id: 2 + name: study_environment + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories3: + id: 3 + name: fee + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories4: + id: 4 + name: find_job + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories5: + id: 5 + name: join + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories6: + id: 6 + name: withdrawal_hibernation_graduation + created_at: <%= Time.current %> + updated_at: <%= Time.current %> + +faqs_categories7: + id: 7 + name: corporate_use + created_at: <%= Time.current %> + updated_at: <%= Time.current %> diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index 6c148a1885a..ccee2661059 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -22,7 +22,7 @@ class FaqTest < ActiveSupport::TestCase end test 'faq1 is invalid if category is null' do - @faq1.category = nil + @faq1.faqs_category_id = nil assert @faq1.invalid? end diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index 0edd4d22b88..f7083d3dc17 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -11,6 +11,7 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - assert_selector '.faqs-item', count: FAQ.category_study_environment.size + study_environment_id = FaqsCategory.find_by(name: 'study_environment').id + assert_selector '.faqs-item', count: FAQ.where(faqs_category_id: study_environment_id).size end end From 0264bbd3c686af5139dfebd787e6ccc98622976c Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 29 Jul 2024 22:37:04 +0900 Subject: [PATCH 087/101] =?UTF-8?q?rubocop=E6=8C=87=E6=91=98=E7=82=B9?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 2 +- app/models/faq.rb | 3 ++- config/locales/ja.yml | 9 +++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index 0acaaed2f26..55acd377c57 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -51,4 +51,4 @@ def set_faq def set_category @category = %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use] end -end \ No newline at end of file +end diff --git a/app/models/faq.rb b/app/models/faq.rb index 1a13fc8de35..8a473fdb121 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true @@ -6,4 +7,4 @@ class FAQ < ApplicationRecord default_scope -> { order(:position) } belongs_to :faqs_category acts_as_list -end \ No newline at end of file +end diff --git a/config/locales/ja.yml b/config/locales/ja.yml index ff8e5b33141..cdf2e7cd2be 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -455,3 +455,12 @@ ja: followup: "こんにちは。\nご登録から30日ほど経ちますが、学習について困っていることや詰まっている部分などありますでしょうか?\nもしあれば、メンターの皆さんにお気軽にご相談ください。" comeback: "お帰りなさい!!復会ありがとうございます。\n休会中に何か変わったことがあれば、再びスムーズに学び始めることができるように全力でサポートします。何か困ったことや質問があれば、メンターの皆さんに遠慮なくご相談ください。\n\nまたフィヨルドブートキャンプの Discord のサーバーに入室できるように、再度、Doc にある Discord の招待 URL にアクセスをお願いします。\n" unregistered: 未登録 + faq: + all: 全て + study_content: 学習内容について + study_environment: 学習環境について + fee: 利用料について + find_job: 就職について + join: 入会について + withdrawal_hibernation_graduation: 退会、休会、卒業について + corporate_use: 法人利用について From f8821c8fad364fa4b4a85982d2876c29faf327c2 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Tue, 30 Jul 2024 00:06:39 +0900 Subject: [PATCH 088/101] =?UTF-8?q?=E3=83=A2=E3=83=90=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=AE=E4=B8=8D=E5=85=B7=E5=90=88=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=80=81lint=E3=82=A8=E3=83=A9=E3=83=BC=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/welcome/faqs/_faqs_mobile_filter.html.slim | 10 +++++----- app/views/welcome/faqs/_faqs_pc_filter.html.slim | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index 4345bd4f957..2e95b4ce582 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -7,10 +7,10 @@ select name="category" onchange="this.form.submit()" option value="" | 全て - - FaqsCategory.all.each do |category| - - if params[:category] == category + - FaqsCategory.all.find_each do |category| + - if params[:category] == category.name option value=category selected=true - = t("faq.#{category}") + = t("faq.#{category.name}") - else - option value=category - = t("faq.#{category}") + option value=category.name + = t("faq.#{category.name}") diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index 05a1c4f5dc6..a380a2f7932 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,7 +4,7 @@ = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - FaqsCategory.all.each do |category| + - FaqsCategory.all.find_each do |category| li.side-filter__item = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do = t("faq.#{category.name}") From 84e72e7a38c405ad9a3a7776639c85bf53e389d2 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Wed, 31 Jul 2024 09:12:47 +0900 Subject: [PATCH 089/101] =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E6=99=82=E3=81=AB=E4=B8=A6=E3=81=B3=E9=A0=86=E3=82=92?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin/faqs_controller.rb | 2 +- app/controllers/welcome_controller.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index 55acd377c57..e1f2be60f69 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -5,7 +5,7 @@ class Admin::FaqsController < AdminController before_action :set_category, only: %i[edit new update create] def index - @faqs = FAQ.all + @faqs = FAQ.all.order(:created_at) end def new diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 44b120efab7..5cca481805d 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -18,9 +18,9 @@ def pricing; end def faq category = FaqsCategory.find_by(name: params[:category]) @faqs = if params[:category].present? - FAQ.where(faqs_category_id: category.id) if category.present? + FAQ.where(faqs_category_id: category.id).order(:created_at) if category.present? else - FAQ.all + FAQ.all.order(:created_at) end end From 670c85f07006dfdb9787514bc9517aba91a13d28 Mon Sep 17 00:00:00 2001 From: sochi419 Date: Mon, 23 Sep 2024 04:41:35 +0900 Subject: [PATCH 090/101] =?UTF-8?q?=E3=83=A2=E3=83=87=E3=83=AB=E3=80=81?= =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=96=E3=83=AB=E5=90=8D=E3=81=AE=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 2 +- .../{faqs_category.rb => faq_category.rb} | 2 +- app/views/admin/faqs/_form.html.slim | 4 ++-- app/views/admin/faqs/_table.html.slim | 2 +- .../welcome/faqs/_faqs_mobile_filter.html.slim | 2 +- .../welcome/faqs/_faqs_pc_filter.html.slim | 2 +- ...rename_faqs_categories_to_faq_categories.rb | 5 +++++ db/schema.rb | 18 +++++++++--------- test/system/faq_test.rb | 2 +- 9 files changed, 22 insertions(+), 17 deletions(-) rename app/models/{faqs_category.rb => faq_category.rb} (76%) create mode 100644 db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 5cca481805d..2dfd2610b78 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -16,7 +16,7 @@ def job_support; end def pricing; end def faq - category = FaqsCategory.find_by(name: params[:category]) + category = FaqCategory.find_by(name: params[:category]) @faqs = if params[:category].present? FAQ.where(faqs_category_id: category.id).order(:created_at) if category.present? else diff --git a/app/models/faqs_category.rb b/app/models/faq_category.rb similarity index 76% rename from app/models/faqs_category.rb rename to app/models/faq_category.rb index 79cd69ed3bf..39453dca141 100644 --- a/app/models/faqs_category.rb +++ b/app/models/faq_category.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class FaqsCategory < ApplicationRecord +class FaqCategory < ApplicationRecord validates :name, presence: true, uniqueness: true has_many :faqs, dependent: :destroy end diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index bbd2eaa65e2..995a3d70aff 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -21,8 +21,8 @@ .checkboxes .checkboxes__items - @category.each do |category| - = f.radio_button :faqs_category_id, FaqsCategory.find_by(name: category.to_s).id - = f.label :faqs_category_id, t("faq.#{category}"), value: FaqsCategory.find_by(name: category.to_s).id + = f.radio_button :faqs_category_id, FaqCategory.find_by(name: category.to_s).id + = f.label :faqs_category_id, t("faq.#{category}"), value: FaqCategory.find_by(name: category.to_s).id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim index d73db2b2dc5..ca7ce7ae95c 100644 --- a/app/views/admin/faqs/_table.html.slim +++ b/app/views/admin/faqs/_table.html.slim @@ -19,7 +19,7 @@ = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen td.admin-table__item-value.is-text-align-center - = t("faq.#{FaqsCategory.find_by(id: faq.faqs_category_id).name}") + = t("faq.#{FaqCategory.find_by(id: faq.faqs_category_id).name}") td.admin-table__item-value.is-text-align-center.is-grab span.js-grab.a-grab i.fa-solid.fa-align-justify diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index 2e95b4ce582..b37a9c23151 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -7,7 +7,7 @@ select name="category" onchange="this.form.submit()" option value="" | 全て - - FaqsCategory.all.find_each do |category| + - FaqCategory.all.find_each do |category| - if params[:category] == category.name option value=category selected=true = t("faq.#{category.name}") diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index a380a2f7932..590f6d508e3 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,7 +4,7 @@ = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - FaqsCategory.all.find_each do |category| + - FaqCategory.all.find_each do |category| li.side-filter__item = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do = t("faq.#{category.name}") diff --git a/db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb b/db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb new file mode 100644 index 00000000000..fa3a657a049 --- /dev/null +++ b/db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb @@ -0,0 +1,5 @@ +class RenameFaqsCategoriesToFAQCategories < ActiveRecord::Migration[6.1] + def change + rename_table :faqs_categories, :faq_categories + end +end diff --git a/db/schema.rb b/db/schema.rb index 30ceb56e767..3c9afebb208 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2024_08_21_190009) do +ActiveRecord::Schema.define(version: 2024_09_22_193630) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -267,6 +267,13 @@ t.index ["user_id"], name: "index_external_entries_on_user_id" end + create_table "faq_categories", force: :cascade do |t| + t.string "name", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["name"], name: "index_faq_categories_on_name", unique: true + end + create_table "faqs", force: :cascade do |t| t.text "answer", null: false t.string "question", null: false @@ -279,13 +286,6 @@ t.index ["question"], name: "index_faqs_on_question", unique: true end - create_table "faqs_categories", force: :cascade do |t| - t.string "name", null: false - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.index ["name"], name: "index_faqs_categories_on_name", unique: true - end - create_table "followings", force: :cascade do |t| t.integer "follower_id" t.integer "followed_id" @@ -828,7 +828,7 @@ add_foreign_key "check_boxes", "survey_questions" add_foreign_key "discord_profiles", "users" add_foreign_key "external_entries", "users" - add_foreign_key "faqs", "faqs_categories" + add_foreign_key "faqs", "faq_categories", column: "faqs_category_id" add_foreign_key "hibernations", "users" add_foreign_key "images", "users" add_foreign_key "learning_minute_statistics", "practices" diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index f7083d3dc17..96aed24fc8c 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -11,7 +11,7 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - study_environment_id = FaqsCategory.find_by(name: 'study_environment').id + study_environment_id = FaqCategory.find_by(name: 'study_environment').id assert_selector '.faqs-item', count: FAQ.where(faqs_category_id: study_environment_id).size end end From 10a30b521399d3a02169637131818817c2e7eb18 Mon Sep 17 00:00:00 2001 From: machida Date: Wed, 9 Oct 2024 00:41:39 +0900 Subject: [PATCH 091/101] =?UTF-8?q?=E6=96=B0=E3=83=87=E3=82=B6=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=92=E9=81=A9=E7=94=A8=E3=81=97=E3=80=81=E3=81=A8?= =?UTF-8?q?=E3=82=8A=E3=81=82=E3=81=88=E3=81=9A=E5=8B=95=E3=81=8F=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 動かなくなったFAQの順番移動を動くようにした --- app/controllers/admin/faqs_controller.rb | 2 +- app/controllers/api/admin/faq_controller.rb | 52 ++- app/controllers/welcome_controller.rb | 13 +- app/javascript/sort-faq.js | 3 +- .../stylesheets/atoms/_a-text-input.sass | 2 + app/javascript/stylesheets/lp.sass | 8 +- app/javascript/stylesheets/lp/base/_base.sass | 1 - .../stylesheets/lp/blocks/lp/_lp-faq.sass | 9 + .../stylesheets/lp/blocks/lp/_lp-faqs.sass | 1 - .../lp/blocks/lp/_side-filter.sass | 22 ++ .../lp}/_welcome-top-info.sass | 0 .../_corporate-training-images.sass | 0 .../_corporate-training-overview.sass | 0 .../welcome/_welcome-trial-period-table.sass | 21 -- .../stylesheets/welcome/_side-filter.sass | 12 - app/models/faq.rb | 3 +- app/models/faq_category.rb | 2 +- app/views/admin/faq/show.html.slim | 68 ++++ app/views/admin/faqs/_form.html.slim | 7 +- app/views/admin/faqs/_table.html.slim | 11 +- app/views/admin/faqs/edit.html.slim | 16 +- app/views/welcome/_faq.html.slim | 331 ------------------ app/views/welcome/faq.html.slim | 97 ++--- app/views/welcome/faqs/_faqs_item.html.slim | 23 +- .../faqs/_faqs_mobile_filter.html.slim | 4 +- .../welcome/faqs/_faqs_pc_filter.html.slim | 4 +- config/routes/api.rb | 2 +- ...faqs_categories.yml => faq_categories.yml} | 14 +- db/fixtures/faqs.yml | 42 +-- .../20240313020054_create_faqs_categories.rb | 3 +- ..._faqs_categories_id_to_faqs_category_id.rb | 2 +- db/schema.rb | 6 +- db/seeds.rb | 2 +- test/fixtures/faqs.yml | 42 +-- test/models/faq_test.rb | 2 +- test/system/faq_test.rb | 4 +- 36 files changed, 312 insertions(+), 519 deletions(-) create mode 100644 app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass rename app/javascript/stylesheets/lp/{welcome => blocks/lp}/_welcome-top-info.sass (100%) delete mode 100644 app/javascript/stylesheets/lp/corporate-training/_corporate-training-images.sass delete mode 100644 app/javascript/stylesheets/lp/corporate-training/_corporate-training-overview.sass delete mode 100644 app/javascript/stylesheets/lp/welcome/_welcome-trial-period-table.sass delete mode 100644 app/javascript/stylesheets/welcome/_side-filter.sass create mode 100644 app/views/admin/faq/show.html.slim delete mode 100644 app/views/welcome/_faq.html.slim rename db/fixtures/{faqs_categories.yml => faq_categories.yml} (84%) diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index e1f2be60f69..2668b5ee155 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -41,7 +41,7 @@ def destroy private def faq_params - params.require(:faq).permit(:answer, :question, :faqs_category_id) + params.require(:faq).permit(:answer, :question, :faq_category_id) end def set_faq diff --git a/app/controllers/api/admin/faq_controller.rb b/app/controllers/api/admin/faq_controller.rb index e56eac06318..d23c1170473 100644 --- a/app/controllers/api/admin/faq_controller.rb +++ b/app/controllers/api/admin/faq_controller.rb @@ -1,12 +1,56 @@ # frozen_string_literal: true class API::Admin::FAQController < API::Admin::BaseController + before_action :set_faq, only: %i[show update] + + def show + render json: @faq + end + def update - @faq = FAQ.find(params[:id]) - if @faq.insert_at(params[:insert_at].to_i) - head :no_content + # パラメータをログに出力 + Rails.logger.info "Received params: #{params.inspect}" + + if params[:faq_category_id].blank? + Rails.logger.error 'faq_category_id is missing' + return render json: { error: 'FAQ category is required' }, status: :unprocessable_entity + end + + # insert_atパラメータが数値であるか確認 + if params[:insert_at].present? && valid_integer?(params[:insert_at]) + # faq_category_idの更新 + if @faq.update(faq_category_id: params[:faq_category_id]) + # insert_atの処理 + if @faq.insert_at(params[:insert_at].to_i) + Rails.logger.info "FAQ updated successfully: #{@faq.inspect}" + head :no_content + else + Rails.logger.error "FAQ update failed: #{@faq.errors.full_messages.join(', ')}" + render json: { errors: @faq.errors.full_messages }, status: :unprocessable_entity + end + else + Rails.logger.error "FAQ update failed during faq_category_id update: #{@faq.errors.full_messages.join(', ')}" + render json: { errors: @faq.errors.full_messages }, status: :unprocessable_entity + end else - render json: @faq.errors, status: :unprocessable_entity + Rails.logger.error "Invalid insert_at parameter: #{params[:insert_at]}" + render json: { error: 'Invalid insert_at parameter' }, status: :unprocessable_entity end end + + private + + def set_faq + @faq = FAQ.find_by(id: params[:id]) + return if @faq + + Rails.logger.error "FAQ not found with ID: #{params[:id]}" + render json: { error: 'FAQ not found' }, status: :not_found + end + + def valid_integer?(str) + Integer(str) + rescue StandardError + false + end end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 2dfd2610b78..ef67f9ba54c 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require_dependency 'faq_category' class WelcomeController < ApplicationController skip_before_action :require_active_user_login, raise: false layout 'lp' @@ -16,12 +17,12 @@ def job_support; end def pricing; end def faq - category = FaqCategory.find_by(name: params[:category]) - @faqs = if params[:category].present? - FAQ.where(faqs_category_id: category.id).order(:created_at) if category.present? - else - FAQ.all.order(:created_at) - end + if params[:category].present? + category = FAQCategory.find_by(name: params[:category]) + @faqs = category.present? ? FAQ.where(faq_category_id: category.id).order(:created_at) : FAQ.none + else + @faqs = FAQ.all.order(:created_at) + end end def training; end diff --git a/app/javascript/sort-faq.js b/app/javascript/sort-faq.js index 1128d4a15f2..94af702f27d 100644 --- a/app/javascript/sort-faq.js +++ b/app/javascript/sort-faq.js @@ -11,7 +11,8 @@ document.addEventListener('DOMContentLoaded', () => { handle: '.js-grab', onEnd(event) { const id = event.item.dataset.faq_id - const params = { insert_at: event.newIndex + 1 } + const category_id = event.item.dataset.faq_category_id + const params = { insert_at: event.newIndex + 1, faq_category_id: category_id } const url = `/api/admin/faqs/${id}` Bootcamp.patch(url, params).catch((error) => { diff --git a/app/javascript/stylesheets/atoms/_a-text-input.sass b/app/javascript/stylesheets/atoms/_a-text-input.sass index 4865e2f9648..dfd97e4f45a 100644 --- a/app/javascript/stylesheets/atoms/_a-text-input.sass +++ b/app/javascript/stylesheets/atoms/_a-text-input.sass @@ -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 diff --git a/app/javascript/stylesheets/lp.sass b/app/javascript/stylesheets/lp.sass index face95ec51d..feb2a4d5325 100644 --- a/app/javascript/stylesheets/lp.sass +++ b/app/javascript/stylesheets/lp.sass @@ -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 @@ -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 @@ -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 diff --git a/app/javascript/stylesheets/lp/base/_base.sass b/app/javascript/stylesheets/lp/base/_base.sass index 7f5e3d1c670..3b9dc7f024e 100644 --- a/app/javascript/stylesheets/lp/base/_base.sass +++ b/app/javascript/stylesheets/lp/base/_base.sass @@ -5,7 +5,6 @@ html.is-lp body.is-lp background-color: var(--background) - .not-logged-in-footer color: var(--default-text) diff --git a/app/javascript/stylesheets/lp/blocks/lp/_lp-faq.sass b/app/javascript/stylesheets/lp/blocks/lp/_lp-faq.sass index caa203004ef..56807b58ed2 100644 --- a/app/javascript/stylesheets/lp/blocks/lp/_lp-faq.sass +++ b/app/javascript/stylesheets/lp/blocks/lp/_lp-faq.sass @@ -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) diff --git a/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass b/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass index 012ff017b5f..ce7765c7669 100644 --- a/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass +++ b/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass @@ -3,4 +3,3 @@ flex-direction: column gap: 2rem max-width: 40rem - float: right diff --git a/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass b/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass new file mode 100644 index 00000000000..0722f7b117e --- /dev/null +++ b/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass @@ -0,0 +1,22 @@ +.side-filter + position: sticky + top: 4rem + +media-breakpoint-down(md) + display: none + +.side-filter__item-link + display: flex + padding: .75rem + +text-block(.875rem 1.4) + overflow: hidden + text-decoration: none + transition: all .2s ease-out + .side-filter__item:not(:last-child) & + border-bottom: solid 1px var(--border-tint) + &:hover + background-color: var(--primary-tint) + &.is-active + background-color: var(--primary-semi-tint) + pointer-events: none + text-decoration: none + color: var(--primary-text) diff --git a/app/javascript/stylesheets/lp/welcome/_welcome-top-info.sass b/app/javascript/stylesheets/lp/blocks/lp/_welcome-top-info.sass similarity index 100% rename from app/javascript/stylesheets/lp/welcome/_welcome-top-info.sass rename to app/javascript/stylesheets/lp/blocks/lp/_welcome-top-info.sass diff --git a/app/javascript/stylesheets/lp/corporate-training/_corporate-training-images.sass b/app/javascript/stylesheets/lp/corporate-training/_corporate-training-images.sass deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/app/javascript/stylesheets/lp/corporate-training/_corporate-training-overview.sass b/app/javascript/stylesheets/lp/corporate-training/_corporate-training-overview.sass deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/app/javascript/stylesheets/lp/welcome/_welcome-trial-period-table.sass b/app/javascript/stylesheets/lp/welcome/_welcome-trial-period-table.sass deleted file mode 100644 index 3da44f4da82..00000000000 --- a/app/javascript/stylesheets/lp/welcome/_welcome-trial-period-table.sass +++ /dev/null @@ -1,21 +0,0 @@ -.welcome-trial-period-table - width: 100% - background-color: var(--base) - border: solid 1px var(--border) - border-radius: .25rem - tr - &:not(:last-child) - border-bottom: solid 1px var(--border) - th, - td - +text-block(.8125rem 1.5) - padding: .5rem 1rem - th - text-align: center - white-space: nowrap - font-weight: 800 - td - text-align: center - .trial_end - color: $danger - background-color: rgba($danger, .1) diff --git a/app/javascript/stylesheets/welcome/_side-filter.sass b/app/javascript/stylesheets/welcome/_side-filter.sass deleted file mode 100644 index ace29c476d5..00000000000 --- a/app/javascript/stylesheets/welcome/_side-filter.sass +++ /dev/null @@ -1,12 +0,0 @@ -.side-filter__item-link - display: flex - padding: .75rem - +text-block(.875rem 1.4) - overflow: hidden - .side-filter__item:not(:last-child) & - border-bottom: solid 1px var(--border-tint) - &.is-active - background-color: var(--warning) - pointer-events: none - text-decoration: none - color: var(--default-text) diff --git a/app/models/faq.rb b/app/models/faq.rb index 8a473fdb121..ccf57486224 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -3,8 +3,9 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true + validates :faq_category_id, presence: true default_scope -> { order(:position) } - belongs_to :faqs_category + belongs_to :faq_category acts_as_list end diff --git a/app/models/faq_category.rb b/app/models/faq_category.rb index 39453dca141..b8b8b5050c8 100644 --- a/app/models/faq_category.rb +++ b/app/models/faq_category.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class FaqCategory < ApplicationRecord +class FAQCategory < ApplicationRecord validates :name, presence: true, uniqueness: true has_many :faqs, dependent: :destroy end diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim new file mode 100644 index 00000000000..d958ad3f311 --- /dev/null +++ b/app/views/admin/faq/show.html.slim @@ -0,0 +1,68 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQ 詳細 + .page-main-header__end + .page-main-header-actions + ul.page-main-header-actions__items + li.page-main-header-actions__item + = link_to admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back is-back' do + | FAQ一覧 + hr.a-border + .page-body + .container.is-xxl + .row.justify-center + .col-xl-7.col-xs-12 + .page-content + header.page-content-header + // + .page-content-header__start + .page-content-header__user + = render 'users/icon', user: @faq.user, link_class: 'page-content-header__user-link', image_class: 'page-content-header__user-icon' + .page-content-header__end + .page-content-header__row + // + .page-content-header__before-title + = link_to @faq.user, class: 'a-user-name' do + = @faq.user.long_name + h1.page-content-header__title + = format_question(@faq.question) + + .page-content-header__row + .page-content-header-metas + .page-content-header-metas__start + .page-content-header-metas__meta + .a-meta + | #{l @faq.created_at} 公開 + + .page-content-header__row + .page-content-header-metas + .page-content-header-metas__start + .page-content-header-metas__meta + .a-meta + = t("faq.#{FaqsCategory.find_by(id: @faq.faq_category_id).name}") + + .a-card + .card-body + .card__description + .js-markdown-view.a-long-text.is-md + = @faq.answer + .card-footer + .card-main-actions + .card-main-actions__items + .card-main-actions__item + = link_to edit_admin_faq_path(@faq), class: 'card-main-actions__action a-button is-sm is-secondary is-block' do + i.fa-solid.fa-pen + | 内容修正 diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index 995a3d70aff..e6ea47ba2f4 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -2,7 +2,7 @@ .form__items .form-item = f.label :question, class: 'a-form-label' - = f.text_area :question, class: 'a-text-input' + = f.text_area :question, class: 'a-text-input is-xs' .form-item .row.js-markdown-parent .col-md-6.col-xs-12 @@ -21,8 +21,9 @@ .checkboxes .checkboxes__items - @category.each do |category| - = f.radio_button :faqs_category_id, FaqCategory.find_by(name: category.to_s).id - = f.label :faqs_category_id, t("faq.#{category}"), value: FaqCategory.find_by(name: category.to_s).id + .checkboxes__item.is-radio + = f.radio_button :faq_category_id, FAQCategory.find_by(name: category.to_s).id, class: 'a-toggle-checkbox' + = f.label :faq_category_id, t("faq.#{category}"), value: FAQCategory.find_by(name: category.to_s).id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim index ca7ce7ae95c..2a7818dd84a 100644 --- a/app/views/admin/faqs/_table.html.slim +++ b/app/views/admin/faqs/_table.html.slim @@ -9,17 +9,16 @@ th.admin-table__label 並び順 tbody.admin-table__items#js-faq-sortable - faqs.each do |faq| - tr.admin-table__item(id="faq_#{faq.id}") - td.admin-table__item-value.is-text-align-center - = link_to admin_faq_path(faq) do - = format_question(faq.question) - td.admin-table__item-value.is-text-align-center + tr.admin-table__item(data-faq_id="#{faq.id}" id="#{faq.id}" data-faq_category_id="#{faq.faq_category_id}") + td.admin-table__item-value + = format_question(faq.question) + td.admin-table__item-value = faq.answer td.admin-table__item-value.is-text-align-center = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen td.admin-table__item-value.is-text-align-center - = t("faq.#{FaqCategory.find_by(id: faq.faqs_category_id).name}") + = t("faq.#{FAQCategory.find_by(id: faq.faq_category_id)&.name}") td.admin-table__item-value.is-text-align-center.is-grab span.js-grab.a-grab i.fa-solid.fa-align-justify diff --git a/app/views/admin/faqs/edit.html.slim b/app/views/admin/faqs/edit.html.slim index b9b6c129018..08b20b8ef6e 100644 --- a/app/views/admin/faqs/edit.html.slim +++ b/app/views/admin/faqs/edit.html.slim @@ -5,21 +5,16 @@ header.page-header .page-header__inner h1.page-header__title | 管理ページ - .page-header-actions - .page-header-actions__items - .page-header-actions__item - = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do - i.fa-regular.fa-plus - | FAQ編集 + = render 'admin/admin_page_tabs' -.page-main - .page-main-header +main.page-main + header.page-main-header .container .page-main-header__inner .page-main-header__start h1.page-main-header__title - = title + | FAQ一覧 .page-main-header__end .page-header-actions .page-header-actions__items @@ -27,7 +22,6 @@ header.page-header = link_to admin_faqs_path, class: 'a-button is-md is-secondary is-block is-back' do | FAQ一覧 hr.a-border - = render 'admin/admin_page_tabs' .page-body - .container.is-lg + .container.is-xl = render 'form', faq: @faq diff --git a/app/views/welcome/_faq.html.slim b/app/views/welcome/_faq.html.slim deleted file mode 100644 index 6dcd0e8a59c..00000000000 --- a/app/views/welcome/_faq.html.slim +++ /dev/null @@ -1,331 +0,0 @@ -.lp - section.lp-content.is-lp-bg-1.is-top-title - .l-container.is-lg - .lp-content__inner - .lp-content__start - header.lp-content__header - h2.lp-content-title.text-center.is-border-bottom - | よくある質問 - .lp-content__end - .lp-faqs - .row.is-gutter-width-32 - .col-xl-4.col-lg-4.col-xs-12 - .a-card - | それは黄金の昼下がり気ままにただようぼくらオールは二本ともあぶなげに小さな腕で漕がれ小さな手がぼくらのただよいを導こうとかっこうだけ申し訳につけてああ残酷な三人!こんな時間にこんな夢見る天気のもとで - - .a-card - .welcome-section__description - p - | わからないこと、気になることがありましたら、 - = link_to new_inquiry_path, class: 'welcome-section__description-link' do - | こちら - | から質問してください。 - - .col-xl-8.col-lg-8.col-xs-12 - .lp-faqs__items - - @faqs.each do |faq| - section.lp-faq - .lp-faq__inner - header.lp-faq__header - h3.lp-faq__title - = faq.question - .lp-faq__body - .a-short-text - = simple_format h faq.answer - hr.a-border - - - - - - - - - - - // - section.welcome-sections.is-faq#faq - .welcome-section__faqs - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 学習を終えるのにどれくらいの時間がかかりますか? - .faqs-item__body - .a-long-text.is-md - p - | かかる時間は人それぞれですが、プログラム経験が全くない人の場合、 - | 1,200時間くらいかかる方が多いです。 - p - | 覚えが早い、遅いも関係しますが、 - | 短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。 - p - | 知的好奇心が求めるままに気になったこともきっちり調べる人は、時間がかかっても、 - | 就職後に仕事やプログラマーコミュニティで大活躍をしているので、卒業までの時間が短ければいいとは考えていません。 - p - | フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、 - | 泣く泣くカリキュラムを削ったりなどもしているのですが、 - | 年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、 - | なかなか卒業までの時間を短縮させるのが難しいです。 - p - | とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは - | 何一つなかった、と言ってくれてます(自慢)。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 途中で辞めることは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | いつでも退会ができます。退会をすると翌月からの請求は止まります。 - | 退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、 - | 学習をやめる場合は必ず退会を行ってください。 - p - | フィヨルドブートキャンプでは、プログラマーになることを考えたけど、 - | 自分には向いていなかったことに気づくことも大きな価値だと考えています。 - p - | プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを - | 最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 学習はオンラインだけですか? - .faqs-item__body - .a-long-text.is-md - p - | オンラインだけです。 - p - | オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる - | 飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの - | 何かしらのオンラインイベントが毎日のように開催されています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 休会をすることは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | 最大3ヶ月まで休会をすることが可能です。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | わからないことがあった場合、質問はできますか? - .faqs-item__body - .a-long-text.is-md - p - | できます。 - p - | フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、 - | とても長くプログラミング教育をやってきたのですが、 - | その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。 - p - | 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、 - | 質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、 - | それを鍛えるためにたくさんの質問をする方法を用意しています。 - p - | 学習をする度に提出する日報に質問を書く、 - | フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、 - | 質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、 - | メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 退会した月は料金が日割りで請求されますか? - .faqs-item__body - .a-long-text.is-md - p - | 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? - .faqs-item__body - .a-long-text.is-md - p - | 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。 - | ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。 - | もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、 - | 就職を必ずしなくてはいけないという縛りはありません。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 現在、大学に在学中なのですが、参加できますか? - .faqs-item__body - .a-long-text.is-md - p - | 学生でも参加可能です。年齢に制限はありません。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | Linuxで学習をしたいのですが可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | Linuxでも可能ですが条件があります。 - | 用意しているカリキュラムは Mac を想定して作られています。 - | そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムを - | Linuxに合わせて操作方法などを変える必要があります。 - | それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | Windowsで学習をしたいのですが可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。 - | WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。 - | そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。 - p = link_to 'WSL2が使えるマシンとは?', 'https://bootcamp.fjord.jp/articles/32' - p = link_to 'WSL2でLinuxを使おう', 'https://bootcamp.fjord.jp/articles/6' - - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 古い OS のままで学習をしたいのですが可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | カリキュラムが、最新の Mac の OS を想定して作られています。 - | 多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。 - | 何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、 - | それとは別の Mac を用意してから参加されることをおすすめします。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 転職エージェントを使って就職活動をすることは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? - .faqs-item__body - .a-long-text.is-md - p - | 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、 - | 推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。 - | ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、 - | それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか? - .faqs-item__body - .a-long-text.is-md - p - | 全く問題ありません。 - p - | フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、 - | 正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。 - | イベントによっては女性の参加者の方が多いこともあります。 - p - | たくさんの女性が卒業しプログラマーとして就職し活躍しています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 30代なのですが、エンジニアとして就職することは可能ですか? - .faqs-item__body - .a-long-text.is-md - p - | 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。 - | 特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。 - p - | 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。 - p - | 年齢に関わらず、一定のプログラミングスキルがあることは最低条件で、 - | 就職をするためにはそれ以外の要素も必要ですが、 - | 30代以下に比べてより高いレベルでの、今までのキャリアで培った特別な経験や実績、 - | 高いコミュニケーション能力を求められる傾向にあります。 - p - | 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、 - | どの会社でどんな仕事をすれば自分の価値を出せるか? - | そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。 - p - | また、40代以上に強そうな転職エージェントを探し、 - | 予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 会社の新人研修など法人での利用はできますか? - .faqs-item__body - .a-long-text.is-md - p - | 可能です。 - p - | 法人でのご利用については#{link_to 'こちら', training_path}に詳細を記載しております。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 何をしたら卒業になりますか? - .faqs-item__body - .a-long-text.is-md - p - | 全てのプラクティスを修了したら卒業になります。 - p - | 最後のプラクティスが自作サービスをリリースする、というものになっています。 - | 月に一回行っている卒業式で、自作サービスの発表をしてもらい、 - | その後に卒業証書授与を行っています。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | 利用料の領収書は発行してもらえますか? - .faqs-item__body - .a-long-text.is-md - p - | 発行します。 - p - | Stripe という決済サービスを利用しているのですが、 - | それが発行する領収書をダウンロードすることができます。 - section.faqs-item.a-card - .card-body__inner - header.faqs-item__header - h2.faqs-item__title - | フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか? - .faqs-item__body - .a-long-text.is-md - p - | 可能です。 - p - | フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。 - | フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。 - p - | オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、 - | カメラをオンにすることは強制していません。 diff --git a/app/views/welcome/faq.html.slim b/app/views/welcome/faq.html.slim index 0fd688a4d66..f85fb832f10 100644 --- a/app/views/welcome/faq.html.slim +++ b/app/views/welcome/faq.html.slim @@ -3,43 +3,60 @@ - set_meta_tags(site: 'FJORD BOOT CAMP(フィヨルドブートキャンプ)', description: 'フィヨルドブートキャンプに寄せられたよくあるお問い合わせとその回答の一覧です。') -header.welcome-page-header - .container.is-xl - .welcome-page-header__inner - .welcome-page-header__start - h1.welcome-page-header__title - | FAQ - - if current_user&.mentor? - .welcome-page-header__end - = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do - i.fas.fa-plus - | FAQ追加 - -.welcome-sections#faqs - section.welcome-section.is-faq - .container.is-lg - h2.welcome-section__title - | FAQ - - if params[:category].present? - span.ml-4.is-hidden-sm-down - | 「#{t("faq.#{params[:category]}")}」 - .welcome-section__description - .container.is-lg - p - | わからないこと、気になることがありましたら、 - = link_to new_inquiry_path, class: 'welcome-section__description-link' do - | こちら - | から質問してください。 - - .faqs - = render '/welcome/faqs/faqs_mobile_filter' - .faqs__main - .container.is-lg - .faqs__row - .faqs__start.is-hidden-sm-down - .faqs__nav - = render '/welcome/faqs/faqs_pc_filter' - .faqs__end - .faqs__items - - @faqs.each do |faq| - = render '/welcome/faqs/faqs_item', faq: faq +.lp + header.lp-page-header + .l-container + .lp-page-header__inner + .lp-page-header__start + h1.lp-page-header__title + = title + .lp-page-header__end + - if current_user&.admin? + nav.lp-page-header-nav + ul.lp-page-header-nav__items + li.lp-page-header-nav__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary-border is-block' do + i.fas.fa-plus + | FAQ追加 + section.lp-content.is-lp-bg-1.is-top-title + .l-container.is-lg + .lp-content__inner + .lp-content__start + header.lp-content__header + h2.lp-content-title.text-center.is-border-bottom + | よくある質問 + .lp-content__end + .lp-content-stack + .lp-content-stack__item + .lp-content__description + #faqs + .l-inner-container.is-md + .a-short-text + p.text-center + | わからないこと、気になることがありましたら、 + br.is-hidden-md-up + = link_to new_inquiry_path, class: 'welcome-section__description-link' do + | こちらからお問い合わせください + | 。 + .lp-content-stack__item + .lp-faqs + .row.is-gutter-width-32 + .col-lg-4.col-xs-12 + = render '/welcome/faqs/faqs_mobile_filter' + .mb-4 + = render '/welcome/faqs/faqs_pc_filter' + .col-xl-8.col-lg-8.col-xs-12 + .lp-content-stack + .lp-content-stack__item.is-hidden-md-down + - if params[:category].present? + h2.lp-content-sub-title.text-center + | FAQ + span.ml-4 + | 「#{t("faq.#{params[:category]}")}」 + - else + h2.lp-content-sub-title.text-center + | 全てのFAQ + .lp-content-stack__item + .lp-faqs__items + - @faqs.each do |faq| + = render '/welcome/faqs/faqs_item', faq: faq diff --git a/app/views/welcome/faqs/_faqs_item.html.slim b/app/views/welcome/faqs/_faqs_item.html.slim index de7f4040445..b4c0a0e8ed2 100644 --- a/app/views/welcome/faqs/_faqs_item.html.slim +++ b/app/views/welcome/faqs/_faqs_item.html.slim @@ -1,12 +1,13 @@ -section.faqs-item - .faqs-item__inner - h3.faqs-item__title - = format_question(faq.question) - hr.a-border-tint - .faqs-item__body - .a-long-text.is-md.js-markdown-view +section.lp-faq + .lp-faq__inner + header.lp-faq__header + h3.lp-faq__title + = faq.question + .lp-faq__body + .a-short-text.js-markdown-view = faq.answer - - if admin_login? - p - = link_to edit_admin_faq_path(faq) do - | 編集 + - if admin_login? + .lp-faq__edit + = link_to edit_admin_faq_path(faq), class: 'lp-faq__edit-link' do + | 編集 +hr.a-border diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index b37a9c23151..5f25405f30c 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -1,4 +1,4 @@ -.faqs__filter.is-hidden-md-up +.faqs__filter.is-hidden-lg-up .container.is-xs .form-item.is-inline label.a-form-label @@ -7,7 +7,7 @@ select name="category" onchange="this.form.submit()" option value="" | 全て - - FaqCategory.all.find_each do |category| + - FAQCategory.all.find_each do |category| - if params[:category] == category.name option value=category selected=true = t("faq.#{category.name}") diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index 590f6d508e3..fb00101e650 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,7 +4,7 @@ = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - FaqCategory.all.find_each do |category| + - FAQCategory.all.find_each do |category| li.side-filter__item - = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category ? 'is-active' : ''}" do + = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category.name ? 'is-active' : ''}" do = t("faq.#{category.name}") diff --git a/config/routes/api.rb b/config/routes/api.rb index 7c8e105b6ad..8a7fbce0510 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -5,7 +5,7 @@ namespace 'admin' do resource :count, controller: 'count', only: %i(show) resources :companies, only: %i(index destroy) - resources :faqs, only: %i(update), controller: 'faq' + resources :faqs, only: %i(update show), controller: 'faq' end namespace 'mentor' do resources :practices, only: %i(index) diff --git a/db/fixtures/faqs_categories.yml b/db/fixtures/faq_categories.yml similarity index 84% rename from db/fixtures/faqs_categories.yml rename to db/fixtures/faq_categories.yml index a6d94f121ef..4285189965f 100644 --- a/db/fixtures/faqs_categories.yml +++ b/db/fixtures/faq_categories.yml @@ -1,40 +1,40 @@ -faqs_categories1: +faq_categories1: id: 1 name: study_content created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories2: +faq_categories2: id: 2 name: study_environment created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories3: +faq_categories3: id: 3 name: fee created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories4: +faq_categories4: id: 4 name: find_job created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories5: +faq_categories5: id: 5 name: join created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories6: +faq_categories6: id: 6 name: withdrawal_hibernation_graduation created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories7: +faq_categories7: id: 7 name: corporate_use created_at: <%= Time.current %> diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index a0117e116ae..3e224cee286 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_category_id: 2 + faq_category_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_category_id: 6 + faq_category_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_category_id: 2 + faq_category_id: 2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_category_id: 6 + faq_category_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_category_id: 2 + faq_category_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_category_id: 3 + faq_category_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_category_id: 2 + faq_category_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_category_id: 5 + faq_category_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_category_id: 5 + faq_category_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_category_id: 5 + faq_category_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_category_id: 2 + faq_category_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_category_id: 2 + faq_category_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_category_id: 2 + faq_category_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_category_id: 4 + faq_category_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_category_id: 4 + faq_category_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_category_id: 5 + faq_category_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_category_id: 2 + faq_category_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_category_id: 7 + faq_category_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_category_id: 6 + faq_category_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_category_id: 3 + faq_category_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_category_id: 2 + faq_category_id: 2 diff --git a/db/migrate/20240313020054_create_faqs_categories.rb b/db/migrate/20240313020054_create_faqs_categories.rb index 541c1f76e54..fee58ec0651 100644 --- a/db/migrate/20240313020054_create_faqs_categories.rb +++ b/db/migrate/20240313020054_create_faqs_categories.rb @@ -1,7 +1,8 @@ class CreateFaqsCategories < ActiveRecord::Migration[6.1] def change create_table :faqs_categories do |t| - t.string :name + t.references :faq, null: false, foreign_key: true + t.string :name, null: false t.timestamps end diff --git a/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb b/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb index 9dbba246893..0b089ff52a5 100644 --- a/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb +++ b/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb @@ -1,5 +1,5 @@ class RenameFaqsCategoriesIdToFaqsCategoryId < ActiveRecord::Migration[6.1] def change - rename_column :faqs, :faqs_categories_id, :faqs_category_id + rename_column :faqs, :faqs_categories_id, :faq_category_id end end diff --git a/db/schema.rb b/db/schema.rb index 3c9afebb208..f2e0970ac76 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -280,9 +280,9 @@ t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "position" - t.bigint "faqs_category_id", null: false + t.bigint "faq_category_id", null: false t.index ["answer", "question"], name: "index_faqs_on_answer_and_question", unique: true - t.index ["faqs_category_id"], name: "index_faqs_on_faqs_category_id" + t.index ["faq_category_id"], name: "index_faqs_on_faq_category_id" t.index ["question"], name: "index_faqs_on_question", unique: true end @@ -828,7 +828,7 @@ add_foreign_key "check_boxes", "survey_questions" add_foreign_key "discord_profiles", "users" add_foreign_key "external_entries", "users" - add_foreign_key "faqs", "faq_categories", column: "faqs_category_id" + add_foreign_key "faqs", "faq_categories" add_foreign_key "hibernations", "users" add_foreign_key "images", "users" add_foreign_key "learning_minute_statistics", "practices" diff --git a/db/seeds.rb b/db/seeds.rb index f5e0688cf83..8680ef27d2b 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -26,7 +26,7 @@ events external_entries faqs - faqs_categories + faq_categories followings reports learning_times diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 000ccf0d449..f7091deaf7f 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faqs_category_id: 2 + faq_category_id: 2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faqs_category_id: 6 + faq_category_id: 6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faqs_category_id: 2 + faq_category_id: 2 faq4: position: 4 question: 休会をすることは可能ですか answer: 最大3ヶ月まで休会をすることが可能です。 - faqs_category_id: 6 + faq_category_id: 6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faqs_category_id: 2 + faq_category_id: 2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faqs_category_id: 3 + faq_category_id: 3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faqs_category_id: 2 + faq_category_id: 2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faqs_category_id: 5 + faq_category_id: 5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faqs_category_id: 5 + faq_category_id: 5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか answer: 学生でも参加可能です。年齢に制限はありません。 - faqs_category_id: 5 + faq_category_id: 5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faqs_category_id: 2 + faq_category_id: 2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faqs_category_id: 2 + faq_category_id: 2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faqs_category_id: 2 + faq_category_id: 2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faqs_category_id: 4 + faq_category_id: 4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faqs_category_id: 4 + faq_category_id: 4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faqs_category_id: 5 + faq_category_id: 5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faqs_category_id: 2 + faq_category_id: 2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faqs_category_id: 7 + faq_category_id: 7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faqs_category_id: 6 + faq_category_id: 6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faqs_category_id: 3 + faq_category_id: 3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faqs_category_id: 2 + faq_category_id: 2 diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb index ccee2661059..2e080f4c576 100644 --- a/test/models/faq_test.rb +++ b/test/models/faq_test.rb @@ -22,7 +22,7 @@ class FaqTest < ActiveSupport::TestCase end test 'faq1 is invalid if category is null' do - @faq1.faqs_category_id = nil + @faq1.faq_category_id = nil assert @faq1.invalid? end diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index 96aed24fc8c..92c6189990c 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -11,7 +11,7 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs by category' do visit '/faq?category=study_environment' - study_environment_id = FaqCategory.find_by(name: 'study_environment').id - assert_selector '.faqs-item', count: FAQ.where(faqs_category_id: study_environment_id).size + study_environment_id = FAQCategory.find_by(name: 'study_environment').id + assert_selector '.faqs-item', count: FAQ.where(faq_category_id: study_environment_id).size end end From 431f18383ee67a150157b8397c3748f381764fa7 Mon Sep 17 00:00:00 2001 From: machida Date: Wed, 9 Oct 2024 22:29:22 +0900 Subject: [PATCH 092/101] =?UTF-8?q?FAQ=E3=83=87=E3=82=B6=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :cop: :cop: faqs categoryをfaq categoryに修正 FaqをFAQに修正 FaqをFAQに修正 FaqをFAQに修正 デザイン変更に伴うテスト変更’ デザイン変更に伴うseed変更’ 並べ替えを動くようにした 不要なカラムを削除 :cop: ATCH リクエストで faq_category_id パラメータが送信されていなかったのを修正 リファクタ testでのカテゴリーの指定方法を修正 --- app/controllers/api/admin/faq_controller.rb | 45 +++++++++---------- app/javascript/sort-faq.js | 22 ++++++--- .../stylesheets/config/mixins/_grid.sass | 7 ++- .../lp/blocks/lp/_lp-content-sub-title.sass | 8 ++++ .../stylesheets/lp/blocks/lp/_lp-faqs.sass | 1 + .../lp/blocks/lp/_side-filter.sass | 8 +++- app/views/admin/faq/show.html.slim | 2 +- app/views/admin/faqs/_table.html.slim | 2 +- app/views/welcome/faq.html.slim | 9 ++-- .../welcome/faqs/_faqs_pc_filter.html.slim | 19 ++++---- config/locales/ja.yml | 2 +- ...> 20240313020054_create_faq_categories.rb} | 4 +- .../20240313025400_add_foreign_key_to_faqs.rb | 2 +- ...ot_null_constraint_to_faq_categories_id.rb | 2 +- ...ll_constraint_to_name_in_faq_categories.rb | 5 +++ ...l_constraint_to_name_in_faqs_categories.rb | 5 --- ...me_faq_categories_id_to_faq_category_id.rb | 5 +++ ..._faqs_categories_id_to_faqs_category_id.rb | 5 --- ...add_unique_index_to_faq_categories_name.rb | 5 +++ ...dd_unique_index_to_faqs_categories_name.rb | 5 --- ...ename_faqs_categories_to_faq_categories.rb | 5 --- ...32610_remove_faq_id_from_faq_categories.rb | 6 +++ db/schema.rb | 4 +- ...faqs_categories.yml => faq_categories.yml} | 14 +++--- test/fixtures/faqs.yml | 42 ++++++++--------- test/integration/api/admin/faq_test.rb | 3 +- test/system/api/admin/faq_test.rb | 14 +++--- test/system/faq_test.rb | 4 +- 28 files changed, 138 insertions(+), 117 deletions(-) rename db/migrate/{20240313020054_create_faqs_categories.rb => 20240313020054_create_faq_categories.rb} (58%) create mode 100644 db/migrate/20240327123100_add_not_null_constraint_to_name_in_faq_categories.rb delete mode 100644 db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb create mode 100644 db/migrate/20240506064858_rename_faq_categories_id_to_faq_category_id.rb delete mode 100644 db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb create mode 100644 db/migrate/20240506101642_add_unique_index_to_faq_categories_name.rb delete mode 100644 db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb delete mode 100644 db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb create mode 100644 db/migrate/20241010132610_remove_faq_id_from_faq_categories.rb rename test/fixtures/{faqs_categories.yml => faq_categories.yml} (84%) diff --git a/app/controllers/api/admin/faq_controller.rb b/app/controllers/api/admin/faq_controller.rb index d23c1170473..0c0d8b653fb 100644 --- a/app/controllers/api/admin/faq_controller.rb +++ b/app/controllers/api/admin/faq_controller.rb @@ -8,33 +8,16 @@ def show end def update - # パラメータをログに出力 Rails.logger.info "Received params: #{params.inspect}" - if params[:faq_category_id].blank? - Rails.logger.error 'faq_category_id is missing' - return render json: { error: 'FAQ category is required' }, status: :unprocessable_entity - end + return render_error('FAQ category is required') if params[:faq_category_id].blank? + return render_error('Invalid insert_at parameter') unless valid_integer?(params[:insert_at]) - # insert_atパラメータが数値であるか確認 - if params[:insert_at].present? && valid_integer?(params[:insert_at]) - # faq_category_idの更新 - if @faq.update(faq_category_id: params[:faq_category_id]) - # insert_atの処理 - if @faq.insert_at(params[:insert_at].to_i) - Rails.logger.info "FAQ updated successfully: #{@faq.inspect}" - head :no_content - else - Rails.logger.error "FAQ update failed: #{@faq.errors.full_messages.join(', ')}" - render json: { errors: @faq.errors.full_messages }, status: :unprocessable_entity - end - else - Rails.logger.error "FAQ update failed during faq_category_id update: #{@faq.errors.full_messages.join(', ')}" - render json: { errors: @faq.errors.full_messages }, status: :unprocessable_entity - end + if update_faq + Rails.logger.info "FAQ updated successfully: #{@faq.inspect}" + head :no_content else - Rails.logger.error "Invalid insert_at parameter: #{params[:insert_at]}" - render json: { error: 'Invalid insert_at parameter' }, status: :unprocessable_entity + render json: { errors: @faq.errors.full_messages }, status: :unprocessable_entity end end @@ -53,4 +36,20 @@ def valid_integer?(str) rescue StandardError false end + + def update_faq + FAQ.transaction do + return false unless @faq.update(faq_category_id: params[:faq_category_id]) + + @faq.insert_at(params[:insert_at].to_i) + end + rescue ActiveRecord::RecordInvalid => e + Rails.logger.error "FAQ update failed: #{e.message}" + false + end + + def render_error(message) + Rails.logger.error message + render json: { error: message }, status: :unprocessable_entity + end end diff --git a/app/javascript/sort-faq.js b/app/javascript/sort-faq.js index 94af702f27d..f57b08c7dfa 100644 --- a/app/javascript/sort-faq.js +++ b/app/javascript/sort-faq.js @@ -3,20 +3,28 @@ import Bootcamp from 'bootcamp' document.addEventListener('DOMContentLoaded', () => { const element = document.querySelector('#js-faq-sortable') - if (!element) { - return null - } + if (!element) return Sortable.create(element, { handle: '.js-grab', onEnd(event) { - const id = event.item.dataset.faq_id - const category_id = event.item.dataset.faq_category_id - const params = { insert_at: event.newIndex + 1, faq_category_id: category_id } + const id = event.item.dataset.faqId + const categoryId = event.item.dataset.faqCategoryId + + if (!id || !categoryId) { + console.warn('Missing required data attributes: faqId or faqCategoryId') + return + } + + const params = { + insert_at: event.newIndex + 1, + faq_category_id: categoryId + } + const url = `/api/admin/faqs/${id}` Bootcamp.patch(url, params).catch((error) => { - console.warn(error) + console.error('Error while updating FAQ order:', error) }) } }) diff --git a/app/javascript/stylesheets/config/mixins/_grid.sass b/app/javascript/stylesheets/config/mixins/_grid.sass index 5c435867655..8104ffc60cc 100644 --- a/app/javascript/stylesheets/config/mixins/_grid.sass +++ b/app/javascript/stylesheets/config/mixins/_grid.sass @@ -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) diff --git a/app/javascript/stylesheets/lp/blocks/lp/_lp-content-sub-title.sass b/app/javascript/stylesheets/lp/blocks/lp/_lp-content-sub-title.sass index c33c9b0cd59..d7b8f2947f8 100644 --- a/app/javascript/stylesheets/lp/blocks/lp/_lp-content-sub-title.sass +++ b/app/javascript/stylesheets/lp/blocks/lp/_lp-content-sub-title.sass @@ -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) diff --git a/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass b/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass index ce7765c7669..3ad02bcc819 100644 --- a/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass +++ b/app/javascript/stylesheets/lp/blocks/lp/_lp-faqs.sass @@ -3,3 +3,4 @@ flex-direction: column gap: 2rem max-width: 40rem + margin: 0 diff --git a/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass b/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass index 0722f7b117e..959a1cc5689 100644 --- a/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass +++ b/app/javascript/stylesheets/lp/blocks/lp/_side-filter.sass @@ -1,6 +1,10 @@ .side-filter position: sticky top: 4rem + max-width: 14rem + margin: 0 + .a-card + overflow: hidden +media-breakpoint-down(md) display: none @@ -16,7 +20,7 @@ &:hover background-color: var(--primary-tint) &.is-active - background-color: var(--primary-semi-tint) + background-color: var(--main) pointer-events: none text-decoration: none - color: var(--primary-text) + color: var(--reversal-text) diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faq/show.html.slim index d958ad3f311..8ced5e19e25 100644 --- a/app/views/admin/faq/show.html.slim +++ b/app/views/admin/faq/show.html.slim @@ -52,7 +52,7 @@ main.page-main .page-content-header-metas__start .page-content-header-metas__meta .a-meta - = t("faq.#{FaqsCategory.find_by(id: @faq.faq_category_id).name}") + = t("faq.#{FAQCategory.find_by(id: @faq.faq_category_id).name}") .a-card .card-body diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim index 2a7818dd84a..09ea36a6576 100644 --- a/app/views/admin/faqs/_table.html.slim +++ b/app/views/admin/faqs/_table.html.slim @@ -9,7 +9,7 @@ th.admin-table__label 並び順 tbody.admin-table__items#js-faq-sortable - faqs.each do |faq| - tr.admin-table__item(data-faq_id="#{faq.id}" id="#{faq.id}" data-faq_category_id="#{faq.faq_category_id}") + tr.admin-table__item(data-faq-id="#{faq.id}" id="#{faq.id}" data-faq-category-id="#{faq.faq_category_id}") td.admin-table__item-value = format_question(faq.question) td.admin-table__item-value diff --git a/app/views/welcome/faq.html.slim b/app/views/welcome/faq.html.slim index f85fb832f10..1f9300bf09c 100644 --- a/app/views/welcome/faq.html.slim +++ b/app/views/welcome/faq.html.slim @@ -43,20 +43,19 @@ .row.is-gutter-width-32 .col-lg-4.col-xs-12 = render '/welcome/faqs/faqs_mobile_filter' - .mb-4 - = render '/welcome/faqs/faqs_pc_filter' + = render '/welcome/faqs/faqs_pc_filter' .col-xl-8.col-lg-8.col-xs-12 .lp-content-stack .lp-content-stack__item.is-hidden-md-down - if params[:category].present? - h2.lp-content-sub-title.text-center + h2.lp-content-sub-title.text-center.is-sm | FAQ span.ml-4 | 「#{t("faq.#{params[:category]}")}」 - else - h2.lp-content-sub-title.text-center + h2.lp-content-sub-title.text-center.is-sm | 全てのFAQ .lp-content-stack__item - .lp-faqs__items + .lp-faqs__items.mx-auto - @faqs.each do |faq| = render '/welcome/faqs/faqs_item', faq: faq diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index fb00101e650..176b8450f63 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -1,10 +1,11 @@ -.side-filter.a-card - ul.side-filter__items - li.side-filter__item - = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do - | 全て - - - FAQCategory.all.find_each do |category| +.side-filter + .a-card + ul.side-filter__items li.side-filter__item - = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category.name ? 'is-active' : ''}" do - = t("faq.#{category.name}") + = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do + | 全て + + - FAQCategory.all.find_each do |category| + li.side-filter__item + = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category.name ? 'is-active' : ''}" do + = t("faq.#{category.name}") diff --git a/config/locales/ja.yml b/config/locales/ja.yml index cdf2e7cd2be..9c08a3d61ae 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -307,7 +307,7 @@ ja: faq: question: 質問 answer: 回答 - faqs_category: カテゴリー + faq_category: カテゴリー enums: user: job: diff --git a/db/migrate/20240313020054_create_faqs_categories.rb b/db/migrate/20240313020054_create_faq_categories.rb similarity index 58% rename from db/migrate/20240313020054_create_faqs_categories.rb rename to db/migrate/20240313020054_create_faq_categories.rb index fee58ec0651..255bd0a5337 100644 --- a/db/migrate/20240313020054_create_faqs_categories.rb +++ b/db/migrate/20240313020054_create_faq_categories.rb @@ -1,6 +1,6 @@ -class CreateFaqsCategories < ActiveRecord::Migration[6.1] +class CreateFAQCategories < ActiveRecord::Migration[6.1] def change - create_table :faqs_categories do |t| + create_table :faq_categories do |t| t.references :faq, null: false, foreign_key: true t.string :name, null: false diff --git a/db/migrate/20240313025400_add_foreign_key_to_faqs.rb b/db/migrate/20240313025400_add_foreign_key_to_faqs.rb index 2470431f475..f651fb30674 100644 --- a/db/migrate/20240313025400_add_foreign_key_to_faqs.rb +++ b/db/migrate/20240313025400_add_foreign_key_to_faqs.rb @@ -1,5 +1,5 @@ class AddForeignKeyToFaqs < ActiveRecord::Migration[6.1] def change - add_reference :faqs, :faqs_categories, foreign_key: true + add_reference :faqs, :faq_categories, foreign_key: true end end diff --git a/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb b/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb index cd9d61e9ec6..700f6bf6bae 100644 --- a/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb +++ b/db/migrate/20240327122855_add_not_null_constraint_to_faq_categories_id.rb @@ -1,5 +1,5 @@ class AddNotNullConstraintToFAQCategoriesId < ActiveRecord::Migration[6.1] def change - change_column_null :faqs, :faqs_categories_id, false + change_column_null :faqs, :faq_categories_id, false end end diff --git a/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faq_categories.rb b/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faq_categories.rb new file mode 100644 index 00000000000..d22ca90e843 --- /dev/null +++ b/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faq_categories.rb @@ -0,0 +1,5 @@ +class AddNotNullConstraintToNameInFAQCategories < ActiveRecord::Migration[6.1] + def change + change_column_null :faq_categories, :name, false + end +end diff --git a/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb b/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb deleted file mode 100644 index d395995047e..00000000000 --- a/db/migrate/20240327123100_add_not_null_constraint_to_name_in_faqs_categories.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddNotNullConstraintToNameInFaqsCategories < ActiveRecord::Migration[6.1] - def change - change_column_null :faqs_categories, :name, false - end -end diff --git a/db/migrate/20240506064858_rename_faq_categories_id_to_faq_category_id.rb b/db/migrate/20240506064858_rename_faq_categories_id_to_faq_category_id.rb new file mode 100644 index 00000000000..c4d6fd0dcb7 --- /dev/null +++ b/db/migrate/20240506064858_rename_faq_categories_id_to_faq_category_id.rb @@ -0,0 +1,5 @@ +class RenameFAQCategoriesIdToFAQCategoryId < ActiveRecord::Migration[6.1] + def change + rename_column :faqs, :faq_categories_id, :faq_category_id + end +end diff --git a/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb b/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb deleted file mode 100644 index 0b089ff52a5..00000000000 --- a/db/migrate/20240506064858_rename_faqs_categories_id_to_faqs_category_id.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RenameFaqsCategoriesIdToFaqsCategoryId < ActiveRecord::Migration[6.1] - def change - rename_column :faqs, :faqs_categories_id, :faq_category_id - end -end diff --git a/db/migrate/20240506101642_add_unique_index_to_faq_categories_name.rb b/db/migrate/20240506101642_add_unique_index_to_faq_categories_name.rb new file mode 100644 index 00000000000..348c087b7b0 --- /dev/null +++ b/db/migrate/20240506101642_add_unique_index_to_faq_categories_name.rb @@ -0,0 +1,5 @@ +class AddUniqueIndexToFAQCategoriesName < ActiveRecord::Migration[6.1] + def change + add_index :faq_categories, :name, unique: true + end +end diff --git a/db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb b/db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb deleted file mode 100644 index 09a79007930..00000000000 --- a/db/migrate/20240506101642_add_unique_index_to_faqs_categories_name.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddUniqueIndexToFaqsCategoriesName < ActiveRecord::Migration[6.1] - def change - add_index :faqs_categories, :name, unique: true - end -end diff --git a/db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb b/db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb deleted file mode 100644 index fa3a657a049..00000000000 --- a/db/migrate/20240922193630_rename_faqs_categories_to_faq_categories.rb +++ /dev/null @@ -1,5 +0,0 @@ -class RenameFaqsCategoriesToFAQCategories < ActiveRecord::Migration[6.1] - def change - rename_table :faqs_categories, :faq_categories - end -end diff --git a/db/migrate/20241010132610_remove_faq_id_from_faq_categories.rb b/db/migrate/20241010132610_remove_faq_id_from_faq_categories.rb new file mode 100644 index 00000000000..c35068bcd82 --- /dev/null +++ b/db/migrate/20241010132610_remove_faq_id_from_faq_categories.rb @@ -0,0 +1,6 @@ +class RemoveFAQIdFromFAQCategories < ActiveRecord::Migration[6.1] + def change + remove_foreign_key :faq_categories, :faqs + remove_column :faq_categories, :faq_id + end +end diff --git a/db/schema.rb b/db/schema.rb index f2e0970ac76..cc2e4ad30ba 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2024_09_22_193630) do +ActiveRecord::Schema.define(version: 2024_10_10_132610) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -77,8 +77,8 @@ t.datetime "published_at" t.text "summary" t.integer "thumbnail_type", default: 0, null: false - t.boolean "display_thumbnail_in_body", default: true, null: false t.string "token" + t.boolean "display_thumbnail_in_body", default: true, null: false t.index ["user_id"], name: "index_articles_on_user_id" end diff --git a/test/fixtures/faqs_categories.yml b/test/fixtures/faq_categories.yml similarity index 84% rename from test/fixtures/faqs_categories.yml rename to test/fixtures/faq_categories.yml index a6d94f121ef..4285189965f 100644 --- a/test/fixtures/faqs_categories.yml +++ b/test/fixtures/faq_categories.yml @@ -1,40 +1,40 @@ -faqs_categories1: +faq_categories1: id: 1 name: study_content created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories2: +faq_categories2: id: 2 name: study_environment created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories3: +faq_categories3: id: 3 name: fee created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories4: +faq_categories4: id: 4 name: find_job created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories5: +faq_categories5: id: 5 name: join created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories6: +faq_categories6: id: 6 name: withdrawal_hibernation_graduation created_at: <%= Time.current %> updated_at: <%= Time.current %> -faqs_categories7: +faq_categories7: id: 7 name: corporate_use created_at: <%= Time.current %> diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index f7091deaf7f..3e224cee286 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -1,6 +1,6 @@ faq1: position: 1 - question: 学習を終えるのにどれくらいの時間がかかりますか + question: 学習を終えるのにどれくらいの時間がかかりますか? answer: "\ かかる時間は人それぞれですが、プログラム経験が全くない人の場合、1,200時間くらいかかる方が多いです。\n\n\ 覚えが早い、遅いも関係しますが、短時間でも毎日必ず学習する場合と間が空いてしまう場合など、時間のかけかたにも影響があったりもします。\n\n\ @@ -12,7 +12,7 @@ faq1: faq2: position: 2 - question: 途中で辞めることは可能ですか + question: 途中で辞めることは可能ですか? answer: "\ いつでも退会ができます。退会をすると翌月からの請求は止まります。退会をしない限りは請求は止まらず、オンライン学習アプリにログインをしていなくても請求されてしまうので、学習をやめる場合は必ず退会を行ってください。\n\n\ フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ @@ -22,7 +22,7 @@ faq2: faq3: position: 3 - question: 学習はオンラインだけですか + question: 学習はオンラインだけですか? answer: "\ オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ @@ -31,13 +31,13 @@ faq3: faq4: position: 4 - question: 休会をすることは可能ですか + question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 faq_category_id: 6 faq5: position: 5 - question: わからないことがあった場合、質問はできますか + question: わからないことがあった場合、質問はできますか? answer: "\ できます。\n\n\ フィヨルドブートキャンプの前身であるフィヨルドインターンから数えると、とても長くプログラミング教育をやってきたのですが、その歴史は受講生が抱えているわからないことを、どうやって拾い上げるかの歴史でもありました。\n\n\ @@ -48,43 +48,43 @@ faq5: faq6: position: 6 - question: 退会した月は料金が日割りで請求されますか + question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 faq_category_id: 3 faq7: position: 7 - question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか + question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 faq_category_id: 2 faq8: position: 8 - question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか + question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 faq_category_id: 5 faq9: position: 9 - question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか + question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 faq_category_id: 5 faq10: position: 10 - question: 現在、大学に在学中なのですが、参加できますか + question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 faq_category_id: 5 faq11: position: 11 - question: Linuxで学習をしたいのですが可能ですか + question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 faq_category_id: 2 faq12: position: 12 - question: Windowsで学習をしたいのですが可能ですか + question: Windowsで学習をしたいのですが可能ですか? answer: "\ Windowsでも可能ですが、WSL2を使うのでWSL2対応のパソコンであることが必須です。WSL2についてとWSL2に対応しているかの調べ方は下記にかいてあります。そちらを読んで理解できないようであればMacを購入してから受講することをおすすめしております。\n\n\ [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ @@ -94,25 +94,25 @@ faq12: faq13: position: 13 - question: 古い OS のままで学習をしたいのですが可能ですか + question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 faq_category_id: 2 faq14: position: 14 - question: 転職エージェントを使って就職活動をすることは可能ですか + question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 faq_category_id: 4 faq15: position: 15 - question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか + question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 faq_category_id: 4 faq16: position: 16 - question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか + question: プログラマーは男性が多いと聞いたことがありますが、女性でも大丈夫ですか? answer: "\ 全く問題ありません。\n\n\ フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ @@ -122,7 +122,7 @@ faq16: faq17: position: 17 - question: 30代なのですが、エンジニアとして就職することは可能ですか + question: 30代なのですが、エンジニアとして就職することは可能ですか? answer: "\ 今までの観測範囲から言いますと、30代の方はそれほど不利な感じはないです。特別に若手20代を中心に考えています、という会社がたまにあるぐらいです。\n\n\ 40代で転職した方もいますが、40代以上の方の場合はかなり難しいです。\n\n\ @@ -134,7 +134,7 @@ faq17: faq18: position: 18 - question: 会社の新人研修など法人での利用はできますか + question: 会社の新人研修など法人での利用はできますか? answer: "\ 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ @@ -143,7 +143,7 @@ faq18: faq19: position: 19 - question: 何をしたら卒業になりますか + question: 何をしたら卒業になりますか? answer: "\ 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ @@ -152,7 +152,7 @@ faq19: faq20: position: 20 - question: 利用料の領収書は発行してもらえますか + question: 利用料の領収書は発行してもらえますか? answer: "\ 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ @@ -161,7 +161,7 @@ faq20: faq21: position: 21 - question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか + question: フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか? answer: "\ 可能です。\n\n\ フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ diff --git a/test/integration/api/admin/faq_test.rb b/test/integration/api/admin/faq_test.rb index 0f096407ae1..5d0ef765cd6 100644 --- a/test/integration/api/admin/faq_test.rb +++ b/test/integration/api/admin/faq_test.rb @@ -5,6 +5,7 @@ class API::Admin::FAQTest < ActionDispatch::IntegrationTest test 'PATCH /api/admin/faqs/:id' do target = faqs(:faq1) + faq_category = faq_categories(:faq_categories2) invalid_token = create_token('hatsuno', 'testtest') patch api_admin_faq_path(target), @@ -14,7 +15,7 @@ class API::Admin::FAQTest < ActionDispatch::IntegrationTest valid_token = create_token('komagata', 'testtest') patch( api_admin_faq_path(target), - params: { insert_at: 2 }, + params: { insert_at: 2, faq_category_id: faq_category.id }, headers: { 'Authorization' => "Bearer #{valid_token}" } ) assert_response :no_content diff --git a/test/system/api/admin/faq_test.rb b/test/system/api/admin/faq_test.rb index a00fc93fb25..706f651a629 100644 --- a/test/system/api/admin/faq_test.rb +++ b/test/system/api/admin/faq_test.rb @@ -5,8 +5,8 @@ class API::Admin::FaqTest < ApplicationSystemTestCase test 'sort FAQ' do visit faq_path - assert_equal all('h3.faqs-item__title').first.text, '学習を終えるのにどれくらいの時間がかかりますか?' - assert_equal all('h3.faqs-item__title').last.text, 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか?' + assert_equal all('h3.lp-faq__title').first.text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.lp-faq__title').last.text, 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか?' visit_with_auth admin_faqs_path, 'komagata' source = all('.js-grab.a-grab').first @@ -14,13 +14,13 @@ class API::Admin::FaqTest < ApplicationSystemTestCase source.drag_to(target) visit faq_path - assert_equal all('h3.faqs-item__title').last.text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.lp-faq__title').last.text, '学習を終えるのにどれくらいの時間がかかりますか?' end test "doesn't affect the order of other FAQs" do visit faq_path - assert_equal all('h3.faqs-item__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' - assert_equal all('h3.faqs-item__title')[1].text, '途中で辞めることは可能ですか?' + assert_equal all('h3.lp-faq__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.lp-faq__title')[1].text, '途中で辞めることは可能ですか?' visit_with_auth admin_faqs_path, 'komagata' source = all('.js-grab')[7] # faq8 @@ -28,7 +28,7 @@ class API::Admin::FaqTest < ApplicationSystemTestCase source.drag_to(target) visit faq_path - assert_equal all('h3.faqs-item__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' - assert_equal all('h3.faqs-item__title')[1].text, '途中で辞めることは可能ですか?' + assert_equal all('h3.lp-faq__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' + assert_equal all('h3.lp-faq__title')[1].text, '途中で辞めることは可能ですか?' end end diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index 92c6189990c..8a8bb1cda2d 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -5,13 +5,13 @@ class FAQTest < ApplicationSystemTestCase test 'show listing FAQs' do visit faq_path - assert_selector '.faqs-item', count: FAQ.all.size + assert_selector '.lp-faq', count: FAQ.all.size end test 'show listing FAQs by category' do visit '/faq?category=study_environment' study_environment_id = FAQCategory.find_by(name: 'study_environment').id - assert_selector '.faqs-item', count: FAQ.where(faq_category_id: study_environment_id).size + assert_selector '.lp-faq', count: FAQ.where(faq_category_id: study_environment_id).size end end From 0e778c2d29b8ea61f38d2338637da4fffb9d578a Mon Sep 17 00:00:00 2001 From: komagata Date: Mon, 4 Nov 2024 14:04:09 +0900 Subject: [PATCH 093/101] =?UTF-8?q?FAQ=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E7=AE=A1=E7=90=86=E7=94=BB=E9=9D=A2=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/faq_categories/faqs_controller.rb | 21 +++++++ .../admin/faq_categories_controller.rb | 53 ++++++++++++++++++ app/controllers/admin/faqs_controller.rb | 10 ++-- app/controllers/api/admin/faq_controller.rb | 55 ------------------- app/controllers/welcome_controller.rb | 4 +- app/javascript/packs/application.js | 1 + app/javascript/sort-faq-category.js | 24 ++++++++ app/javascript/sort-faq.js | 18 ++---- app/models/faq.rb | 4 +- app/models/faq_category.rb | 4 +- app/views/admin/_admin_page_tabs.html.slim | 6 +- .../admin/faq_categories/_form.html.slim | 14 +++++ app/views/admin/faq_categories/edit.html.slim | 27 +++++++++ .../admin/faq_categories/faqs/index.html.slim | 40 ++++++++++++++ .../admin/faq_categories/index.html.slim | 52 ++++++++++++++++++ app/views/admin/faq_categories/new.html.slim | 25 +++++++++ app/views/admin/faqs/_form.html.slim | 6 +- app/views/admin/faqs/_table.html.slim | 24 -------- app/views/admin/faqs/index.html.slim | 19 ++++++- app/views/admin/{faq => faqs}/show.html.slim | 0 .../welcome/faqs/_faqs_pc_filter.html.slim | 3 +- config/initializers/inflections.rb | 2 +- config/locales/ja.yml | 12 +--- config/routes/admin.rb | 3 + db/fixtures/faq_categories.yml | 28 +++++----- db/fixtures/faqs.yml | 42 +++++++------- ...03082456_add_position_to_faq_categories.rb | 5 ++ db/schema.rb | 3 +- 28 files changed, 349 insertions(+), 156 deletions(-) create mode 100644 app/controllers/admin/faq_categories/faqs_controller.rb create mode 100644 app/controllers/admin/faq_categories_controller.rb delete mode 100644 app/controllers/api/admin/faq_controller.rb create mode 100644 app/javascript/sort-faq-category.js create mode 100644 app/views/admin/faq_categories/_form.html.slim create mode 100644 app/views/admin/faq_categories/edit.html.slim create mode 100644 app/views/admin/faq_categories/faqs/index.html.slim create mode 100644 app/views/admin/faq_categories/index.html.slim create mode 100644 app/views/admin/faq_categories/new.html.slim delete mode 100644 app/views/admin/faqs/_table.html.slim rename app/views/admin/{faq => faqs}/show.html.slim (100%) create mode 100644 db/migrate/20241103082456_add_position_to_faq_categories.rb diff --git a/app/controllers/admin/faq_categories/faqs_controller.rb b/app/controllers/admin/faq_categories/faqs_controller.rb new file mode 100644 index 00000000000..fa6af629f96 --- /dev/null +++ b/app/controllers/admin/faq_categories/faqs_controller.rb @@ -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 diff --git a/app/controllers/admin/faq_categories_controller.rb b/app/controllers/admin/faq_categories_controller.rb new file mode 100644 index 00000000000..21bdb37eaaf --- /dev/null +++ b/app/controllers/admin/faq_categories_controller.rb @@ -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 diff --git a/app/controllers/admin/faqs_controller.rb b/app/controllers/admin/faqs_controller.rb index 2668b5ee155..88895971fcf 100644 --- a/app/controllers/admin/faqs_controller.rb +++ b/app/controllers/admin/faqs_controller.rb @@ -2,11 +2,9 @@ class Admin::FaqsController < AdminController before_action :set_faq, only: %i[show edit update destroy] - before_action :set_category, only: %i[edit new update create] + before_action :set_faq_category, only: %i[index edit new update create] - def index - @faqs = FAQ.all.order(:created_at) - end + def index; end def new @faq = FAQ.new @@ -48,7 +46,7 @@ def set_faq @faq = FAQ.find(params[:id]) end - def set_category - @category = %i[study_content study_environment fee find_job join withdrawal_hibernation_graduation corporate_use] + def set_faq_category + @faq_categories = FAQCategory.all end end diff --git a/app/controllers/api/admin/faq_controller.rb b/app/controllers/api/admin/faq_controller.rb deleted file mode 100644 index 0c0d8b653fb..00000000000 --- a/app/controllers/api/admin/faq_controller.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -class API::Admin::FAQController < API::Admin::BaseController - before_action :set_faq, only: %i[show update] - - def show - render json: @faq - end - - def update - Rails.logger.info "Received params: #{params.inspect}" - - return render_error('FAQ category is required') if params[:faq_category_id].blank? - return render_error('Invalid insert_at parameter') unless valid_integer?(params[:insert_at]) - - if update_faq - Rails.logger.info "FAQ updated successfully: #{@faq.inspect}" - head :no_content - else - render json: { errors: @faq.errors.full_messages }, status: :unprocessable_entity - end - end - - private - - def set_faq - @faq = FAQ.find_by(id: params[:id]) - return if @faq - - Rails.logger.error "FAQ not found with ID: #{params[:id]}" - render json: { error: 'FAQ not found' }, status: :not_found - end - - def valid_integer?(str) - Integer(str) - rescue StandardError - false - end - - def update_faq - FAQ.transaction do - return false unless @faq.update(faq_category_id: params[:faq_category_id]) - - @faq.insert_at(params[:insert_at].to_i) - end - rescue ActiveRecord::RecordInvalid => e - Rails.logger.error "FAQ update failed: #{e.message}" - false - end - - def render_error(message) - Rails.logger.error message - render json: { error: message }, status: :unprocessable_entity - end -end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index ef67f9ba54c..9902708f767 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -19,9 +19,9 @@ def pricing; end def faq if params[:category].present? category = FAQCategory.find_by(name: params[:category]) - @faqs = category.present? ? FAQ.where(faq_category_id: category.id).order(:created_at) : FAQ.none + @faqs = category.faqs else - @faqs = FAQ.all.order(:created_at) + @faqs = FAQ.order(:position) end end diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 683e517be29..4fbed6ad80c 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -58,6 +58,7 @@ 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' diff --git a/app/javascript/sort-faq-category.js b/app/javascript/sort-faq-category.js new file mode 100644 index 00000000000..be38b30a51b --- /dev/null +++ b/app/javascript/sort-faq-category.js @@ -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) + }) + } + }) +}) diff --git a/app/javascript/sort-faq.js b/app/javascript/sort-faq.js index f57b08c7dfa..c18f72f3a6e 100644 --- a/app/javascript/sort-faq.js +++ b/app/javascript/sort-faq.js @@ -8,23 +8,17 @@ document.addEventListener('DOMContentLoaded', () => { Sortable.create(element, { handle: '.js-grab', onEnd(event) { - const id = event.item.dataset.faqId + const id = event.item.id const categoryId = event.item.dataset.faqCategoryId - - if (!id || !categoryId) { - console.warn('Missing required data attributes: faqId or faqCategoryId') - return - } - + const url = `/admin/faq_categories/${categoryId}/faqs/${id}` const params = { - insert_at: event.newIndex + 1, - faq_category_id: categoryId + faq: { + insert_at: event.newIndex + 1 + } } - const url = `/api/admin/faqs/${id}` - Bootcamp.patch(url, params).catch((error) => { - console.error('Error while updating FAQ order:', error) + console.error('Error while updating an order:', error) }) } }) diff --git a/app/models/faq.rb b/app/models/faq.rb index ccf57486224..fd1a5cde3a2 100644 --- a/app/models/faq.rb +++ b/app/models/faq.rb @@ -3,9 +3,7 @@ class FAQ < ApplicationRecord validates :answer, presence: true, uniqueness: { scope: :question } validates :question, presence: true, uniqueness: true - validates :faq_category_id, presence: true - default_scope -> { order(:position) } belongs_to :faq_category - acts_as_list + acts_as_list scope: :faq_category end diff --git a/app/models/faq_category.rb b/app/models/faq_category.rb index b8b8b5050c8..b8dee45920a 100644 --- a/app/models/faq_category.rb +++ b/app/models/faq_category.rb @@ -2,5 +2,7 @@ class FAQCategory < ApplicationRecord validates :name, presence: true, uniqueness: true - has_many :faqs, dependent: :destroy + has_many :faqs, -> { order(:position) }, dependent: :destroy, inverse_of: :faq_category + default_scope -> { order(:position) } + acts_as_list end diff --git a/app/views/admin/_admin_page_tabs.html.slim b/app/views/admin/_admin_page_tabs.html.slim index 0b6fac6ca1a..fc072903f4e 100644 --- a/app/views/admin/_admin_page_tabs.html.slim +++ b/app/views/admin/_admin_page_tabs.html.slim @@ -25,7 +25,11 @@ = link_to '招待URL', admin_invitation_url_index_path, class: "page-tabs__item-link #{current_link(/^admin-invitation_url/)}" + li.page-tabs__item + = link_to 'FAQカテゴリー', + admin_faq_categories_path, + class: "page-tabs__item-link #{current_link(/^admin-faq_categories/)}" li.page-tabs__item = link_to 'FAQ', admin_faqs_path, - class: "page-tabs__item-link #{current_link(/^admin-faq/)}" + class: "page-tabs__item-link #{current_link(/^admin-faqs/)}" diff --git a/app/views/admin/faq_categories/_form.html.slim b/app/views/admin/faq_categories/_form.html.slim new file mode 100644 index 00000000000..f392c3779eb --- /dev/null +++ b/app/views/admin/faq_categories/_form.html.slim @@ -0,0 +1,14 @@ += form_with model: [:admin, faq_category], local: true, html: { name: 'faq_category' } do |f| + .form__items + .form-item + = f.label :name, class: 'a-form-label' + = f.text_field :name, class: 'a-text-input is-xs' + .form-actions + ul.form-actions__items + li.form-actions__item.is-main + = f.submit nil, class: 'a-button is-lg is-block is-primary' + li.form-actions__item.is-sub + = link_to 'キャンセル', :back, class: 'a-button is-sm is-text' + - if faq_category.id.present? + li.form-actions__item.is-muted + = link_to '削除', admin_faq_category_path(faq_category), data: { confirm: '本当によろしいですか?この操作はデータを削除するため元に戻すことができません。' }, method: :delete, class: 'a-button is-sm is-muted-text' diff --git a/app/views/admin/faq_categories/edit.html.slim b/app/views/admin/faq_categories/edit.html.slim new file mode 100644 index 00000000000..42799c9d756 --- /dev/null +++ b/app/views/admin/faq_categories/edit.html.slim @@ -0,0 +1,27 @@ +- title 'FAQカテゴリー編集' + +header.page-header + .container + .page-header__inner + h1.page-header__title + | 管理ページ + += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQカテゴリー一覧 + .page-main-header__end + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to admin_faqs_path, class: 'a-button is-md is-secondary is-block is-back' do + | FAQカテゴリー一覧 + hr.a-border + .page-body + .container.is-xl + = render 'form', faq_category: @faq_category diff --git a/app/views/admin/faq_categories/faqs/index.html.slim b/app/views/admin/faq_categories/faqs/index.html.slim new file mode 100644 index 00000000000..a82a4880608 --- /dev/null +++ b/app/views/admin/faq_categories/faqs/index.html.slim @@ -0,0 +1,40 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQ一覧 + .page-main-header__end + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQ追加 + hr.a-border + .page-body + .container.is-xl + .admin-table + table.admin-table__table + thead.admin-table__header + tr.admin-table__labels + th.admin-table__label 質問 + th.admin-table__label 並び順 + tbody.admin-table__items#js-faq-sortable + - @faqs.each do |faq| + tr.admin-table__item(id="#{faq.id}" data-faq-category-id="#{faq.faq_category_id}") + td.admin-table__item-value + = format_question(faq.question) + td.admin-table__item-value.is-text-align-center.is-grab + span.js-grab.a-grab + i.fa-solid.fa-align-justify diff --git a/app/views/admin/faq_categories/index.html.slim b/app/views/admin/faq_categories/index.html.slim new file mode 100644 index 00000000000..83a1cd50f62 --- /dev/null +++ b/app/views/admin/faq_categories/index.html.slim @@ -0,0 +1,52 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQカテゴリー一覧 + .page-main-header__end + .page-header-actions + .page-header-actions__items + .page-header-actions__item + = link_to new_admin_faq_category_path, class: 'a-button is-md is-secondary is-block' do + i.fa-regular.fa-plus + | FAQカテゴリー追加 + hr.a-border + .page-body + .container.is-xl + .admin-table + table.admin-table__table + thead.admin-table__header + tr.admin-table__labels + th.admin-table__label 名前 (FAQ数) + th.admin-table__label 操作 + th.admin-table__label 並び順 + tbody.admin-table__items#js-faq-category-sortable + - @faq_categories.each do |faq_category| + tr.admin-table__item(id="#{faq_category.id}") + td.admin-table__item-value + | #{faq_category.name} (#{faq_category.faqs.size}) + td.admin-table__item-value.is-text-align-center + ul.is-inline-buttons + li + = link_to edit_admin_faq_category_path(faq_category), + class: 'a-button is-sm is-secondary is-icon' do + i.fa-solid.fa-pen + li + = link_to admin_faq_category_faqs_path(faq_category), + class: 'a-button is-sm is-secondary is-icon' do + span.js-grab.a-grab + i.fa-solid.fa-align-justify + td.admin-table__item-value.is-text-align-center.is-grab + span.js-grab.a-grab + i.fa-solid.fa-align-justify diff --git a/app/views/admin/faq_categories/new.html.slim b/app/views/admin/faq_categories/new.html.slim new file mode 100644 index 00000000000..02168ba3c70 --- /dev/null +++ b/app/views/admin/faq_categories/new.html.slim @@ -0,0 +1,25 @@ +- title '管理ページ' + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' + +main.page-main + header.page-main-header + .container + .page-main-header__inner + .page-main-header__start + h1.page-main-header__title + | FAQカテゴリー追加 + .page-main-header__end + .page-main-header-actions + ul.page-main-header-actions__items + li.page-main-header-actions__item + = link_to 'FAQカテゴリー一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' + hr.a-border + .page-body + .container.is-xl + = render 'form', faq_category: @faq_category diff --git a/app/views/admin/faqs/_form.html.slim b/app/views/admin/faqs/_form.html.slim index e6ea47ba2f4..f3216b14fc8 100644 --- a/app/views/admin/faqs/_form.html.slim +++ b/app/views/admin/faqs/_form.html.slim @@ -20,10 +20,10 @@ | カテゴリー .checkboxes .checkboxes__items - - @category.each do |category| + - @faq_categories.each do |faq_category| .checkboxes__item.is-radio - = f.radio_button :faq_category_id, FAQCategory.find_by(name: category.to_s).id, class: 'a-toggle-checkbox' - = f.label :faq_category_id, t("faq.#{category}"), value: FAQCategory.find_by(name: category.to_s).id + = f.radio_button :faq_category_id, faq_category.id, class: 'a-toggle-checkbox' + = f.label :faq_category_id, faq_category.name, value: faq_category.id .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faqs/_table.html.slim b/app/views/admin/faqs/_table.html.slim deleted file mode 100644 index 09ea36a6576..00000000000 --- a/app/views/admin/faqs/_table.html.slim +++ /dev/null @@ -1,24 +0,0 @@ -.admin-table - table.admin-table__table - thead.admin-table__header - tr.admin-table__labels - th.admin-table__label 質問 - th.admin-table__label 回答 - th.admin-table__label 編集 - th.admin-table__label カテゴリ - th.admin-table__label 並び順 - tbody.admin-table__items#js-faq-sortable - - faqs.each do |faq| - tr.admin-table__item(data-faq-id="#{faq.id}" id="#{faq.id}" data-faq-category-id="#{faq.faq_category_id}") - td.admin-table__item-value - = format_question(faq.question) - td.admin-table__item-value - = faq.answer - td.admin-table__item-value.is-text-align-center - = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do - i.fa-solid.fa-pen - td.admin-table__item-value.is-text-align-center - = t("faq.#{FAQCategory.find_by(id: faq.faq_category_id)&.name}") - td.admin-table__item-value.is-text-align-center.is-grab - span.js-grab.a-grab - i.fa-solid.fa-align-justify diff --git a/app/views/admin/faqs/index.html.slim b/app/views/admin/faqs/index.html.slim index e168f6d17de..df3f68fd269 100644 --- a/app/views/admin/faqs/index.html.slim +++ b/app/views/admin/faqs/index.html.slim @@ -24,4 +24,21 @@ main.page-main hr.a-border .page-body .container.is-xl - = render 'table', faqs: @faqs + - @faq_categories.each do |faq_category| + h2 = faq_category.name + + - if faq_category.faqs.size.positive? + .admin-table + table.admin-table__table + thead.admin-table__header + tr.admin-table__labels + th.admin-table__label 質問 + th.admin-table__label 編集 + tbody.admin-table__items + - faq_category.faqs.each do |faq| + tr.admin-table__item + td.admin-table__item-value + = link_to format_question(faq.question), admin_faq_path(faq) + td.admin-table__item-value.is-text-align-center + = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do + i.fa-solid.fa-pen diff --git a/app/views/admin/faq/show.html.slim b/app/views/admin/faqs/show.html.slim similarity index 100% rename from app/views/admin/faq/show.html.slim rename to app/views/admin/faqs/show.html.slim diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index 176b8450f63..ffd94094f2f 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,8 +4,7 @@ li.side-filter__item = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - - FAQCategory.all.find_each do |category| + - FAQCategory.order(:position).each do |category| li.side-filter__item = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category.name ? 'is-active' : ''}" do = t("faq.#{category.name}") diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 080ca0b4252..b0593d4557b 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -14,6 +14,6 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym "API" inflect.acronym "AI" - inflect.irregular "buzz", "buzzes" inflect.acronym "FAQ" + inflect.irregular "buzz", "buzzes" end diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 9c08a3d61ae..4ca63f0755d 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -48,6 +48,7 @@ ja: regular_event: 定期イベント request_retirement: 退会申請 faq: FAQ + faq_category: FAQカテゴリ attributes: user: login_name: アカウント @@ -308,6 +309,8 @@ ja: question: 質問 answer: 回答 faq_category: カテゴリー + faq_category: + name: 名前 enums: user: job: @@ -455,12 +458,3 @@ ja: followup: "こんにちは。\nご登録から30日ほど経ちますが、学習について困っていることや詰まっている部分などありますでしょうか?\nもしあれば、メンターの皆さんにお気軽にご相談ください。" comeback: "お帰りなさい!!復会ありがとうございます。\n休会中に何か変わったことがあれば、再びスムーズに学び始めることができるように全力でサポートします。何か困ったことや質問があれば、メンターの皆さんに遠慮なくご相談ください。\n\nまたフィヨルドブートキャンプの Discord のサーバーに入室できるように、再度、Doc にある Discord の招待 URL にアクセスをお願いします。\n" unregistered: 未登録 - faq: - all: 全て - study_content: 学習内容について - study_environment: 学習環境について - fee: 利用料について - find_job: 就職について - join: 入会について - withdrawal_hibernation_graduation: 退会、休会、卒業について - corporate_use: 法人利用について diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 9b6ec50c597..6b1c905f9bb 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -12,5 +12,8 @@ resources :inquiries, only: %i(index show) resources :invitation_url, only: %i(index) resources :faqs + resources :faq_categories, only: %i(index new create edit update destroy) do + resources :faqs, only: %i(index update), controller: 'faq_categories/faqs' + end end end diff --git a/db/fixtures/faq_categories.yml b/db/fixtures/faq_categories.yml index 4285189965f..a10c3ad1995 100644 --- a/db/fixtures/faq_categories.yml +++ b/db/fixtures/faq_categories.yml @@ -1,41 +1,41 @@ faq_categories1: - id: 1 - name: study_content + name: 学習内容について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 1 faq_categories2: - id: 2 - name: study_environment + name: 学習環境について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 2 faq_categories3: - id: 3 - name: fee + name: 利用料について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 3 faq_categories4: - id: 4 - name: find_job + name: 就職について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 4 faq_categories5: - id: 5 - name: join + name: 入会について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 5 faq_categories6: - id: 6 - name: withdrawal_hibernation_graduation + name: 退会、休会、卒業について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 6 faq_categories7: - id: 7 - name: corporate_use + name: 法人利用について created_at: <%= Time.current %> updated_at: <%= Time.current %> + position: 7 diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 3e224cee286..2a4214e2540 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faq_category_id: 6 + faq_category: faq_categories6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - faq_category_id: 6 + faq_category: faq_categories6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faq_category_id: 3 + faq_category: faq_categories2 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faq_category_id: 2 + faq_category: faq_categories2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faq_category_id: 5 + faq_category: faq_categories2 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faq_category_id: 5 + faq_category: faq_categories2 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faq_category_id: 5 + faq_category: faq_categories2 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faq_category_id: 2 + faq_category: faq_categories2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faq_category_id: 2 + faq_category: faq_categories2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faq_category_id: 2 + faq_category: faq_categories2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faq_category_id: 4 + faq_category: faq_categories2 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faq_category_id: 4 + faq_category: faq_categories2 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faq_category_id: 5 + faq_category: faq_categories2 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faq_category_id: 7 + faq_category: faq_categories2 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faq_category_id: 6 + faq_category: faq_categories2 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faq_category_id: 3 + faq_category: faq_categories2 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faq_category_id: 2 + faq_category: faq_categories2 diff --git a/db/migrate/20241103082456_add_position_to_faq_categories.rb b/db/migrate/20241103082456_add_position_to_faq_categories.rb new file mode 100644 index 00000000000..feed59a14d3 --- /dev/null +++ b/db/migrate/20241103082456_add_position_to_faq_categories.rb @@ -0,0 +1,5 @@ +class AddPositionToFAQCategories < ActiveRecord::Migration[6.1] + def change + add_column :faq_categories, :position, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index cc2e4ad30ba..1feea419347 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2024_10_10_132610) do +ActiveRecord::Schema.define(version: 2024_11_03_082456) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -271,6 +271,7 @@ t.string "name", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.integer "position" t.index ["name"], name: "index_faq_categories_on_name", unique: true end From 9072ca431b2047c2e287828718a59cd4668c381e Mon Sep 17 00:00:00 2001 From: komagata Date: Thu, 7 Nov 2024 16:34:01 +0900 Subject: [PATCH 094/101] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=83=86=E3=82=B9=E3=83=88=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/api/admin/faq_test.rb | 34 ------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 test/system/api/admin/faq_test.rb diff --git a/test/system/api/admin/faq_test.rb b/test/system/api/admin/faq_test.rb deleted file mode 100644 index 706f651a629..00000000000 --- a/test/system/api/admin/faq_test.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -require 'application_system_test_case' - -class API::Admin::FaqTest < ApplicationSystemTestCase - test 'sort FAQ' do - visit faq_path - assert_equal all('h3.lp-faq__title').first.text, '学習を終えるのにどれくらいの時間がかかりますか?' - assert_equal all('h3.lp-faq__title').last.text, 'フィヨルドブートキャンプを利用していることを誰にも知られたくないのですが、匿名で参加はできますか?' - - visit_with_auth admin_faqs_path, 'komagata' - source = all('.js-grab.a-grab').first - target = all('.js-grab.a-grab').last - source.drag_to(target) - - visit faq_path - assert_equal all('h3.lp-faq__title').last.text, '学習を終えるのにどれくらいの時間がかかりますか?' - end - - test "doesn't affect the order of other FAQs" do - visit faq_path - assert_equal all('h3.lp-faq__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' - assert_equal all('h3.lp-faq__title')[1].text, '途中で辞めることは可能ですか?' - - visit_with_auth admin_faqs_path, 'komagata' - source = all('.js-grab')[7] # faq8 - target = all('.js-grab')[9] # faq10 - source.drag_to(target) - - visit faq_path - assert_equal all('h3.lp-faq__title')[0].text, '学習を終えるのにどれくらいの時間がかかりますか?' - assert_equal all('h3.lp-faq__title')[1].text, '途中で辞めることは可能ですか?' - end -end From dd23a7ea0844c14227efa4aa25ab9a2ae613f326 Mon Sep 17 00:00:00 2001 From: komagata Date: Mon, 11 Nov 2024 10:08:33 +0900 Subject: [PATCH 095/101] =?UTF-8?q?FAQ=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA?= =?UTF-8?q?=E3=83=BC=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/fixtures/faq_categories.yml | 42 +++++++++++++------------- test/fixtures/faqs.yml | 42 +++++++++++++------------- test/integration/api/admin/faq_test.rb | 23 -------------- test/models/faq_test.rb | 41 ------------------------- test/models/user_test.rb | 2 +- test/system/admin/faq_category_test.rb | 35 +++++++++++++++++++++ test/system/admin/home_test.rb | 11 ++----- 7 files changed, 80 insertions(+), 116 deletions(-) delete mode 100644 test/integration/api/admin/faq_test.rb delete mode 100644 test/models/faq_test.rb create mode 100644 test/system/admin/faq_category_test.rb diff --git a/test/fixtures/faq_categories.yml b/test/fixtures/faq_categories.yml index 4285189965f..1862c0060fd 100644 --- a/test/fixtures/faq_categories.yml +++ b/test/fixtures/faq_categories.yml @@ -1,41 +1,41 @@ -faq_categories1: - id: 1 - name: study_content +faq_category1: + name: 学習内容について + position: 1 created_at: <%= Time.current %> updated_at: <%= Time.current %> -faq_categories2: - id: 2 - name: study_environment +faq_category2: + name: 学習環境について + position: 2 created_at: <%= Time.current %> updated_at: <%= Time.current %> -faq_categories3: - id: 3 - name: fee +faq_category3: + name: 利用料について + position: 3 created_at: <%= Time.current %> updated_at: <%= Time.current %> -faq_categories4: - id: 4 - name: find_job +faq_category4: + name: 就職について + position: 4 created_at: <%= Time.current %> updated_at: <%= Time.current %> -faq_categories5: - id: 5 - name: join +faq_category5: + name: 入会について + position: 5 created_at: <%= Time.current %> updated_at: <%= Time.current %> -faq_categories6: - id: 6 - name: withdrawal_hibernation_graduation +faq_category6: + name: 退会、休会、卒業について + position: 6 created_at: <%= Time.current %> updated_at: <%= Time.current %> -faq_categories7: - id: 7 - name: corporate_use +faq_category7: + name: 法人利用について + position: 7 created_at: <%= Time.current %> updated_at: <%= Time.current %> diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 3e224cee286..a8a7a5b2395 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq2: position: 2 @@ -18,7 +18,7 @@ faq2: フィヨルドブートキャンプでは、プログラマーになることを考えたけど、自分には向いていなかったことに気づくことも大きな価値だと考えています。\n\n\ プログラマーに向いてない、プログラミングが楽しめないと思ったときのリスクを最小限にするため、一度に大金を支払うのではなく、月額課金制にしています。\ " - faq_category_id: 6 + faq_category: faq_categories6 faq3: position: 3 @@ -27,13 +27,13 @@ faq3: オンラインだけです。\n\n\ オンラインだけですが、オンラインの強みを活かして、住んでいる場所を問わずに参加できる飲み会、卒業式、受講生が主催の勉強会、受講生が主催の発表会、質問タイム、雑談会などの何かしらのオンラインイベントが毎日のように開催されています。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq4: position: 4 question: 休会をすることは可能ですか? answer: 最大3ヶ月まで休会をすることが可能です。 - faq_category_id: 6 + faq_category: faq_categories6 faq5: position: 5 @@ -44,43 +44,43 @@ faq5: 人によっては質問をすることが恥ずかしいと感じてしまう人もいまずが、質問をすることはプログラマーにとってとても重要なスキルの一つと考えているため、それを鍛えるためにたくさんの質問をする方法を用意しています。\n\n\ 学習をする度に提出する日報に質問を書く、フィヨルドブートキャンプの学習アプリのQ&A機能を使って質問、質問ようのチャットのチャンネルで質問、質問タイムでビデオチャットで質問、メンターにペアプログラミングを依頼...など、あらゆる質問をする手段を用意しています。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faq_category_id: 3 + faq_category: faq_categories3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faq_category_id: 2 + faq_category: faq_categories2 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faq_category_id: 5 + faq_category: faq_categories5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faq_category_id: 5 + faq_category: faq_categories5 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faq_category_id: 5 + faq_category: faq_categories5 faq11: position: 11 question: Linuxで学習をしたいのですが可能ですか? answer: Linuxでも可能ですが条件があります。用意しているカリキュラムは Mac を想定して作られています。そのため、Linux でカリキュラムを行う場合は自分自身でMac用のカリキュラムをLinuxに合わせて操作方法などを変える必要があります。それができるだけのLinuxのスキルがある方のみ、Linuxで学習をすることをOKとしています。 - faq_category_id: 2 + faq_category: faq_categories2 faq12: position: 12 @@ -90,25 +90,25 @@ faq12: [WSL2が使えるマシンとは?](https://bootcamp.fjord.jp/articles/32)\n\ [WSL2でLinuxを使おう](https://bootcamp.fjord.jp/articles/6)\ " - faq_category_id: 2 + faq_category: faq_categories2 faq13: position: 13 question: 古い OS のままで学習をしたいのですが可能ですか? answer: カリキュラムが、最新の Mac の OS を想定して作られています。多少古い場合はどうにかなるかもしれませんが、OS のせいで学習に詰まることが出てくるかもしれません。何かしら事情があってお手持ちの Mac のバージョンが上げられない場合は、それとは別の Mac を用意してから参加されることをおすすめします。 - faq_category_id: 2 + faq_category: faq_categories2 faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faq_category_id: 4 + faq_category: faq_categories4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faq_category_id: 4 + faq_category: faq_categories4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faq_category_id: 5 + faq_category: faq_categories5 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faq_category_id: 2 + faq_category: faq_categories2 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faq_category_id: 7 + faq_category: faq_categories7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faq_category_id: 6 + faq_category: faq_categories6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faq_category_id: 3 + faq_category: faq_categories3 faq21: position: 21 @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faq_category_id: 2 + faq_category: faq_categories24sdsxcssfdfcvdsxdcvrw diff --git a/test/integration/api/admin/faq_test.rb b/test/integration/api/admin/faq_test.rb deleted file mode 100644 index 5d0ef765cd6..00000000000 --- a/test/integration/api/admin/faq_test.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -require 'test_helper' - -class API::Admin::FAQTest < ActionDispatch::IntegrationTest - test 'PATCH /api/admin/faqs/:id' do - target = faqs(:faq1) - faq_category = faq_categories(:faq_categories2) - - invalid_token = create_token('hatsuno', 'testtest') - patch api_admin_faq_path(target), - headers: { 'Authorization' => "Bearer #{invalid_token}" } - assert_response :unauthorized - - valid_token = create_token('komagata', 'testtest') - patch( - api_admin_faq_path(target), - params: { insert_at: 2, faq_category_id: faq_category.id }, - headers: { 'Authorization' => "Bearer #{valid_token}" } - ) - assert_response :no_content - end -end diff --git a/test/models/faq_test.rb b/test/models/faq_test.rb deleted file mode 100644 index 2e080f4c576..00000000000 --- a/test/models/faq_test.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -require 'test_helper' - -class FaqTest < ActiveSupport::TestCase - setup do - @faq1 = faqs(:faq1) - end - - test 'faq1 is valid' do - assert @faq1.valid? - end - - test 'faq1 is invalid if question is null' do - @faq1.question = nil - assert @faq1.invalid? - end - - test 'faq1 is invalid if answer is null' do - @faq1.answer = nil - assert @faq1.invalid? - end - - test 'faq1 is invalid if category is null' do - @faq1.faq_category_id = nil - assert @faq1.invalid? - end - - test 'new faq is invalid if question has already existed' do - new_faq = faqs(:faq2) - new_faq.question = @faq1.question - assert new_faq.invalid? - end - - test 'new faq is invalid if answer and question has already existed' do - new_faq = faqs(:faq2) - new_faq.answer = @faq1.answer - new_faq.question = @faq1.question - assert new_faq.invalid? - end -end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index ee84a2db751..b01a1970b9f 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -745,7 +745,7 @@ class UserTest < ActiveSupport::TestCase no_area_user = users(:komagata) assert_equal tokyo_user.area, '東京都' assert_equal america_user.area, '米国' - assert_equal no_area_user.area, nil + assert_nil no_area_user.area end test '.by_area' do diff --git a/test/system/admin/faq_category_test.rb b/test/system/admin/faq_category_test.rb new file mode 100644 index 00000000000..90d4e89923f --- /dev/null +++ b/test/system/admin/faq_category_test.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'application_system_test_case' + +class Admin::FaqCategoryest < ApplicationSystemTestCase + test 'display listing FAQCategory' do + visit_with_auth '/admin/faq_categories', 'komagata' + has_css? 'h1.page-main-header__title', text: 'FAQカテゴリー一覧' + end + + test 'create FAQCategory' do + visit_with_auth '/admin/faq_categories/new', 'komagata' + within 'form[name=faq_category]' do + fill_in 'faq_category[name]', with: 'test FAQCategory' + click_button '登録する' + end + assert_text 'FAQカテゴリーを作成しました。' + end + + test 'update FAQ' do + visit_with_auth "/admin/faq_categories/#{faq_categories(:faq_category1).id}/edit", 'komagata' + within 'form[name=faq_category]' do + fill_in 'faq_category[name]', with: 'updated FAQCategory' + click_button '更新する' + end + assert_text 'FAQカテゴリーを更新しました。' + end + + test 'delete FAQ' do + visit_with_auth "/admin/faq_categories/#{faq_categories(:faq_category1).id}/edit", 'komagata' + click_on '削除' + page.driver.browser.switch_to.alert.accept + assert_text 'FAQカテゴリーを削除しました。' + end +end diff --git a/test/system/admin/home_test.rb b/test/system/admin/home_test.rb index dabf6f020ff..83708190852 100644 --- a/test/system/admin/home_test.rb +++ b/test/system/admin/home_test.rb @@ -7,16 +7,9 @@ class Admin::HomeTest < ApplicationSystemTestCase visit_with_auth '/admin', 'komagata' assert_equal '管理ページ | FBC', title - assert_selector 'a.page-tabs__item-link', count: 7 - assert_selector '.page-tabs__item-link', text: '管理ページ' - assert_selector '.page-tabs__item-link', text: 'ユーザー' - assert_selector '.page-tabs__item-link', text: '企業' - assert_selector '.page-tabs__item-link', text: 'お試し延長' - assert_selector '.page-tabs__item-link', text: 'お問い合わせ' - assert_selector '.page-tabs__item-link', text: '招待URL' - assert_selector '.page-tabs__item-link', text: 'FAQ' + tabs = %w[FAQ FAQカテゴリー お問い合わせ お試し延長 ユーザー 企業 招待URL 管理ページ].sort + assert_equal tabs, all('a.page-tabs__item-link').map(&:text).sort assert_no_selector '.page-tabs__item-link', text: 'プラクティス' - assert_no_selector '.page-tabs__item-link', text: 'カテゴリー' assert_no_selector '.page-tabs__item-link', text: 'コース' end end From 37174932a4aa9ca3d05888c44b00725ec2386cb5 Mon Sep 17 00:00:00 2001 From: komagata Date: Mon, 11 Nov 2024 16:29:40 +0900 Subject: [PATCH 096/101] =?UTF-8?q?=E4=BD=BF=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84routes=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/welcome_controller.rb | 13 +++- app/views/welcome/faq.html.slim | 6 +- .../faqs/_faqs_mobile_filter.html.slim | 21 ++--- .../welcome/faqs/_faqs_pc_filter.html.slim | 7 +- app/views/welcome/training.html.slim | 76 +++---------------- config/routes/admin.rb | 2 +- config/routes/api.rb | 1 - db/fixtures/faqs.yml | 40 ++++++++++ 8 files changed, 81 insertions(+), 85 deletions(-) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 9902708f767..524c96cd2fb 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -5,6 +5,7 @@ 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 @@ -17,15 +18,21 @@ def job_support; end def pricing; end def faq + @faq_categories = FAQCategory.order(:position).select do |faq_category| + faq_category.faqs.present? + end + if params[:category].present? - category = FAQCategory.find_by(name: params[:category]) - @faqs = category.faqs + 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 diff --git a/app/views/welcome/faq.html.slim b/app/views/welcome/faq.html.slim index 1f9300bf09c..ae75756cc80 100644 --- a/app/views/welcome/faq.html.slim +++ b/app/views/welcome/faq.html.slim @@ -42,8 +42,10 @@ .lp-faqs .row.is-gutter-width-32 .col-lg-4.col-xs-12 - = render '/welcome/faqs/faqs_mobile_filter' - = render '/welcome/faqs/faqs_pc_filter' + = render partial: '/welcome/faqs/faqs_mobile_filter', + locals: { faq_categories: @faq_categories, faqs: @faqs } + = render partial: '/welcome/faqs/faqs_pc_filter', + locals: { faq_categories: @faq_categories, faqs: @faqs } .col-xl-8.col-lg-8.col-xs-12 .lp-content-stack .lp-content-stack__item.is-hidden-md-down diff --git a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim index 5f25405f30c..3a7e97fbd9f 100644 --- a/app/views/welcome/faqs/_faqs_mobile_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_mobile_filter.html.slim @@ -3,14 +3,17 @@ .form-item.is-inline label.a-form-label | 絞り込む - = form_with url: faq_path, method: :get, local: true, html: { class: 'a-button is-md is-secondary is-select is-block' } do - select name="category" onchange="this.form.submit()" - option value="" + = form_with url: faq_path, + method: :get, + local: true, + html: { class: 'a-button is-md is-secondary is-select is-block' } do + select(name="category" onchange="this.form.submit()") + option(value="") | 全て - - FAQCategory.all.find_each do |category| - - if params[:category] == category.name - option value=category selected=true - = t("faq.#{category.name}") + - faq_categories.each do |faq_category| + - if params[:category] == faq_category.name + option(value="#{faq_category.name}" selected=true) + = faq_category.name - else - option value=category.name - = t("faq.#{category.name}") + option(value="#{faq_category.name}") + = faq_category.name diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index ffd94094f2f..3b1f15cf06d 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -4,7 +4,8 @@ li.side-filter__item = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - - FAQCategory.order(:position).each do |category| + - faq_categories.each do |faq_category| li.side-filter__item - = link_to faq_path(category: category.name, anchor: 'faqs'), class: "side-filter__item-link #{params[:category] == category.name ? 'is-active' : ''}" do - = t("faq.#{category.name}") + = link_to faq_path(category: faq_category.name, anchor: 'faqs'), + class: "side-filter__item-link #{params[:category] == faq_category.name ? 'is-active' : ''}" do + = faq_category.name diff --git a/app/views/welcome/training.html.slim b/app/views/welcome/training.html.slim index f0a4d5e6998..7bba7aef36c 100644 --- a/app/views/welcome/training.html.slim +++ b/app/views/welcome/training.html.slim @@ -740,69 +740,13 @@ article.lp | よくある質問 .lp-content__end .lp-faqs__items - section.lp-faq - .lp-faq__inner - header.lp-faq__header - h4.lp-faq__title - | 研修をより効果的にするための何かアドバイスはありますか? - .lp-faq__body - .a-short-text - p - | まずは、複数人で研修を始めることをおすすめします。 - p - | これまでの経験上、貴社にとっても研修を受ける本人にとっても、 - | 一人より二人以上で研修を始める方がメリットが多いです。 - | 例えば、進み具合を競ったり、お互いつまずいたところを教え合ったり、お互い励まし合ったりなど、 - | お互いにモチベーションが高め合いながらスムーズに研修を進められます。 - p - | また、同じ企業の研修生同士だけでなく、フィヨルドブートキャンプ内のイベントに参加するなどして、 - | 一般の受講生やメンターや卒業生と積極的に関わりを持ち、 - | コミュニティとしてのフィヨルドブートキャンプを活用することも、 - | モチベーションの維持に大きく役立ちますので、 - | おすすめします。 - hr.a-border - section.lp-faq - .lp-faq__inner - header.lp-faq__header - h4.lp-faq__title - | 研修ではなく福利厚生としての利用の場合、一般受講生として利用ができますか? - .lp-faq__body - .a-short-text - p - | 以前はできたのですが、2024年7月24日に規約の変更を行い、現在は研修目的でなくても - | 企業での利用の場合は法人利用としてご利用いただくことになりました。 - p - | 理由は、FBCが月額の利用料と提携企業への卒業生紹介の際に発生する紹介料によって成り立っているため、 - | 法人利用の場合、後者の収益が立たないためです。 - p - | 研修目的ではなくても、法人利用限定の機能(社内メンターの招待、請求書払いなど)は - | ご利用いただけます。 - hr.a-border - section.lp-faq - .lp-faq__inner - header.lp-faq__header - h4.lp-faq__title - | 法人利用の料金が高いのはなぜですか? - .lp-faq__body - .a-short-text - p - | 法人利用の料金が高い理由は2つあります。 - p - | まず、法人利用では業務時間内にFBCでの学習を行うため、一般利用者よりも多くのアウトプットが求められます。 - | これにより、メンターのリソースがより多く必要とされるためです。 - p - | 二つ目の理由は、FBCが月額の利用料と提携企業への卒業生紹介の際に発生する紹介料によって - | 成り立っている点です。 - | 法人利用の場合、後者の収益が立たないため、一般利用よりも高額が設定されています。 - hr.a-border - section.lp-faq - .lp-faq__inner - header.lp-faq__header - h4.lp-faq__title - | 研修はオンラインのみでしょうか? - .lp-faq__body - .a-short-text - p - | オンラインのみになります。 - | 現在、FBCには教室や学習会場のなどの用意はございません。 - hr.a-border + - @faqs.each do |faq| + section.lp-faq + .lp-faq__inner + header.lp-faq__header + h4.lp-faq__title + = faq.question + .lp-faq__body + .a-short-text + = faq.answer + hr.a-border diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 6b1c905f9bb..94656c6230c 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -11,7 +11,7 @@ resources :campaigns, only: %i(new create index edit update) resources :inquiries, only: %i(index show) resources :invitation_url, only: %i(index) - resources :faqs + resources :faqs, only: %i(index new create show edit update destroy) resources :faq_categories, only: %i(index new create edit update destroy) do resources :faqs, only: %i(index update), controller: 'faq_categories/faqs' end diff --git a/config/routes/api.rb b/config/routes/api.rb index 8a7fbce0510..c1c8f4901cd 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -5,7 +5,6 @@ namespace 'admin' do resource :count, controller: 'count', only: %i(show) resources :companies, only: %i(index destroy) - resources :faqs, only: %i(update show), controller: 'faq' end namespace 'mentor' do resources :practices, only: %i(index) diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index 2a4214e2540..f6f175af66c 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -168,3 +168,43 @@ faq21: オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " faq_category: faq_categories2 + +faq22: + position: 22 + question: 研修をより効果的にするための何かアドバイスはありますか? + answer: |- + まずは、複数人で研修を始めることをおすすめします。 + + これまでの経験上、貴社にとっても研修を受ける本人にとっても、一人より二人以上で研修を始める方がメリットが多いです。例えば、進み具合を競ったり、お互いつまずいたところを教え合ったり、お互い励まし合ったりなど、お互いにモチベーションが高め合いながらスムーズに研修を進められます。 + + また、同じ企業の研修生同士だけでなく、フィヨルドブートキャンプ内のイベントに参加するなどして、一般の受講生やメンターや卒業生と積極的に関わりを持ち、コミュニティとしてのフィヨルドブートキャンプを活用することも、モチベーションの維持に大きく役立ちますので、おすすめします。 + faq_category: faq_categories7 + +faq23: + position: 23 + question: 研修ではなく福利厚生としての利用の場合、一般受講生として利用ができますか? + answer: |- + 以前はできたのですが、2024年7月24日に規約の変更を行い、現在は研修目的でなくても企業での利用の場合は法人利用としてご利用いただくことになりました。 + + 理由は、FBCが月額の利用料と提携企業への卒業生紹介の際に発生する紹介料によって成り立っているため、法人利用の場合、後者の収益が立たないためです。 + + 研修目的ではなくても、法人利用限定の機能(社内メンターの招待、請求書払いなど)はご利用いただけます。 + faq_category: faq_categories7 + +faq24: + position: 24 + question: 法人利用の料金が高いのはなぜですか? + answer: |- + 法人利用の料金が高い理由は2つあります。 + + まず、法人利用では業務時間内にFBCでの学習を行うため、一般利用者よりも多くのアウトプットが求められます。これにより、メンターのリソースがより多く必要とされるためです。 + + 二つ目の理由は、FBCが月額の利用料と提携企業への卒業生紹介の際に発生する紹介料によって成り立っている点です。法人利用の場合、後者の収益が立たないため、一般利用よりも高額が設定されています。 + faq_category: faq_categories7 + +faq25: + position: 25 + question: 研修はオンラインのみでしょうか? + answer: |- + オンラインのみになります。現在、FBCには教室や学習会場のなどの用意はございません。 + faq_category: faq_categories7 From f61c0bd1f0aa148d2840848e6b5141a0f6ebbec7 Mon Sep 17 00:00:00 2001 From: komagata Date: Tue, 12 Nov 2024 05:37:57 +0900 Subject: [PATCH 097/101] =?UTF-8?q?FAQ=E9=96=A2=E9=80=A3=E3=81=AE=E5=A4=B1?= =?UTF-8?q?=E6=95=97=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/welcome/faqs/_faqs_pc_filter.html.slim | 3 ++- test/system/faq_test.rb | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/views/welcome/faqs/_faqs_pc_filter.html.slim b/app/views/welcome/faqs/_faqs_pc_filter.html.slim index 3b1f15cf06d..6fa083915b6 100644 --- a/app/views/welcome/faqs/_faqs_pc_filter.html.slim +++ b/app/views/welcome/faqs/_faqs_pc_filter.html.slim @@ -2,7 +2,8 @@ .a-card ul.side-filter__items li.side-filter__item - = link_to faq_path(anchor: 'faqs'), class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do + = link_to faq_path(anchor: 'faqs'), + class: "side-filter__item-link #{params[:category] ? '' : 'is-active'}" do | 全て - faq_categories.each do |faq_category| li.side-filter__item diff --git a/test/system/faq_test.rb b/test/system/faq_test.rb index 8a8bb1cda2d..ce11dfdea6c 100644 --- a/test/system/faq_test.rb +++ b/test/system/faq_test.rb @@ -9,9 +9,8 @@ class FAQTest < ApplicationSystemTestCase end test 'show listing FAQs by category' do - visit '/faq?category=study_environment' - - study_environment_id = FAQCategory.find_by(name: 'study_environment').id - assert_selector '.lp-faq', count: FAQ.where(faq_category_id: study_environment_id).size + visit '/faq?category=学習環境について' + category = FAQCategory.find_by(name: '学習環境について').id + assert_selector '.lp-faq', count: FAQ.where(faq_category: category).size end end From 3481ba6ea47d9a2d849f9882cf91effa68786b08 Mon Sep 17 00:00:00 2001 From: machida Date: Thu, 14 Nov 2024 15:35:20 +0900 Subject: [PATCH 098/101] =?UTF-8?q?FAQ=E3=81=AB=E3=83=87=E3=82=B6=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=82=92=E5=85=A5=E3=82=8C=E3=80=81=E5=88=9D=E6=9C=9F?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE=E3=82=AB=E3=83=86=E3=82=B4?= =?UTF-8?q?=E3=83=AA=E3=82=92=E4=BF=AE=E6=AD=A3=E3=80=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=AE=E3=82=BF=E3=83=96=E3=82=92=E6=95=B4?= =?UTF-8?q?=E7=90=86=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admin/_admin_page_tabs.html.slim | 14 +-- .../admin/faq_categories/_form.html.slim | 2 +- app/views/admin/faq_categories/edit.html.slim | 5 +- .../admin/faq_categories/faqs/index.html.slim | 52 ++++++---- .../admin/faq_categories/index.html.slim | 21 ++-- app/views/admin/faq_categories/new.html.slim | 10 +- app/views/admin/faqs/_faq_tabs.html.slim | 11 +++ app/views/admin/faqs/edit.html.slim | 3 +- app/views/admin/faqs/index.html.slim | 54 +++++++---- app/views/admin/faqs/new.html.slim | 4 +- app/views/admin/faqs/show.html.slim | 95 ++++++++++--------- .../admin/invitation_url/index.html.slim | 1 + app/views/admin/users/_user_tabs.html.slim | 11 +++ app/views/admin/users/edit.html.slim | 9 +- app/views/admin/users/index.html.slim | 2 + app/views/admin/users/password/edit.html.slim | 11 +++ .../current_user/password/edit.html.slim | 7 ++ app/views/users/_password_change.html.slim | 7 -- app/views/welcome/faq.html.slim | 3 +- config/locales/ja.yml | 2 +- db/fixtures/faqs.yml | 35 ++++--- test/fixtures/faqs.yml | 6 +- 22 files changed, 226 insertions(+), 139 deletions(-) create mode 100644 app/views/admin/faqs/_faq_tabs.html.slim create mode 100644 app/views/admin/users/_user_tabs.html.slim diff --git a/app/views/admin/_admin_page_tabs.html.slim b/app/views/admin/_admin_page_tabs.html.slim index fc072903f4e..9615a908b47 100644 --- a/app/views/admin/_admin_page_tabs.html.slim +++ b/app/views/admin/_admin_page_tabs.html.slim @@ -8,7 +8,7 @@ li.page-tabs__item = link_to 'ユーザー', admin_users_path, - class: "page-tabs__item-link #{current_link(/^admin-users/)}" + class: "page-tabs__item-link #{current_link(/^admin-users|^admin-invitation_url/)}" li.page-tabs__item = link_to '企業', admin_companies_path, @@ -21,15 +21,7 @@ = link_to 'お問い合わせ', admin_inquiries_path, class: "page-tabs__item-link #{current_link(/^admin-inquiries/)}" - li.page-tabs__item - = link_to '招待URL', - admin_invitation_url_index_path, - class: "page-tabs__item-link #{current_link(/^admin-invitation_url/)}" - li.page-tabs__item - = link_to 'FAQカテゴリー', - admin_faq_categories_path, - class: "page-tabs__item-link #{current_link(/^admin-faq_categories/)}" li.page-tabs__item = link_to 'FAQ', - admin_faqs_path, - class: "page-tabs__item-link #{current_link(/^admin-faqs/)}" + admin_faq_categories_path, + class: "page-tabs__item-link #{current_link(/^admin-faq_categories|^admin-faqs/)}" diff --git a/app/views/admin/faq_categories/_form.html.slim b/app/views/admin/faq_categories/_form.html.slim index f392c3779eb..1fd8a578f77 100644 --- a/app/views/admin/faq_categories/_form.html.slim +++ b/app/views/admin/faq_categories/_form.html.slim @@ -2,7 +2,7 @@ .form__items .form-item = f.label :name, class: 'a-form-label' - = f.text_field :name, class: 'a-text-input is-xs' + = f.text_field :name, class: 'a-text-input is-xs', placeholder: '学習内容について' .form-actions ul.form-actions__items li.form-actions__item.is-main diff --git a/app/views/admin/faq_categories/edit.html.slim b/app/views/admin/faq_categories/edit.html.slim index 42799c9d756..4611eee6ff5 100644 --- a/app/views/admin/faq_categories/edit.html.slim +++ b/app/views/admin/faq_categories/edit.html.slim @@ -7,6 +7,7 @@ header.page-header | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -14,7 +15,7 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title - | FAQカテゴリー一覧 + | FAQカテゴリー編集 .page-main-header__end .page-header-actions .page-header-actions__items @@ -23,5 +24,5 @@ main.page-main | FAQカテゴリー一覧 hr.a-border .page-body - .container.is-xl + .container.is-sm = render 'form', faq_category: @faq_category diff --git a/app/views/admin/faq_categories/faqs/index.html.slim b/app/views/admin/faq_categories/faqs/index.html.slim index a82a4880608..882a97c2db4 100644 --- a/app/views/admin/faq_categories/faqs/index.html.slim +++ b/app/views/admin/faq_categories/faqs/index.html.slim @@ -1,11 +1,13 @@ -- title '管理ページ' +- title "「#{@faq_category.name}」FAQ一覧" header.page-header .container .page-header__inner - h1.page-header__title = title + h1.page-header__title + | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -13,28 +15,42 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title + | 「#{@faq_category.name}」 | FAQ一覧 + | (#{@faqs.size}) .page-main-header__end .page-header-actions .page-header-actions__items + .page-header-actions__item + = link_to admin_faq_categories_path, class: 'a-button is-md is-secondary is-back is-block' do + | カテゴリー一覧 .page-header-actions__item = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do i.fa-regular.fa-plus - | FAQ追加 + span + | FAQ追加 hr.a-border .page-body - .container.is-xl - .admin-table - table.admin-table__table - thead.admin-table__header - tr.admin-table__labels - th.admin-table__label 質問 - th.admin-table__label 並び順 - tbody.admin-table__items#js-faq-sortable - - @faqs.each do |faq| - tr.admin-table__item(id="#{faq.id}" data-faq-category-id="#{faq.faq_category_id}") - td.admin-table__item-value - = format_question(faq.question) - td.admin-table__item-value.is-text-align-center.is-grab - span.js-grab.a-grab - i.fa-solid.fa-align-justify + .container.is-lg + - if @faq_category.faqs.size.positive? + .admin-table + table.admin-table__table + thead.admin-table__header + tr.admin-table__labels + th.admin-table__label 質問 + th.admin-table__label 並び順 + tbody.admin-table__items#js-faq-sortable + - @faqs.each do |faq| + tr.admin-table__item(id="#{faq.id}" data-faq-category-id="#{faq.faq_category_id}") + td.admin-table__item-value + = link_to admin_faq_path(faq), class: 'a-hover-link' do + = format_question(faq.question) + td.admin-table__item-value.is-text-align-center.is-grab + span.js-grab.a-grab + i.fa-solid.fa-align-justify + - else + .o-empty-message + .o-empty-message__icon + i.fa-regular.fa-sad-tear + .o-empty-message__text + | FAQはまだありません。 diff --git a/app/views/admin/faq_categories/index.html.slim b/app/views/admin/faq_categories/index.html.slim index 83a1cd50f62..b9c6f7d2425 100644 --- a/app/views/admin/faq_categories/index.html.slim +++ b/app/views/admin/faq_categories/index.html.slim @@ -1,11 +1,13 @@ -- title '管理ページ' +- title 'FAQカテゴリー一覧' header.page-header .container .page-header__inner - h1.page-header__title = title + h1.page-header__title + | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -13,17 +15,18 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title - | FAQカテゴリー一覧 + | FAQカテゴリー一覧(#{@faq_categories.size}) .page-main-header__end .page-header-actions .page-header-actions__items .page-header-actions__item = link_to new_admin_faq_category_path, class: 'a-button is-md is-secondary is-block' do i.fa-regular.fa-plus - | FAQカテゴリー追加 + span + | カテゴリー追加 hr.a-border .page-body - .container.is-xl + .container.is-md .admin-table table.admin-table__table thead.admin-table__header @@ -35,18 +38,14 @@ main.page-main - @faq_categories.each do |faq_category| tr.admin-table__item(id="#{faq_category.id}") td.admin-table__item-value - | #{faq_category.name} (#{faq_category.faqs.size}) + = link_to admin_faq_category_faqs_path(faq_category), class: 'a-hover-link' do + | #{faq_category.name} (#{faq_category.faqs.size}) td.admin-table__item-value.is-text-align-center ul.is-inline-buttons li = link_to edit_admin_faq_category_path(faq_category), class: 'a-button is-sm is-secondary is-icon' do i.fa-solid.fa-pen - li - = link_to admin_faq_category_faqs_path(faq_category), - class: 'a-button is-sm is-secondary is-icon' do - span.js-grab.a-grab - i.fa-solid.fa-align-justify td.admin-table__item-value.is-text-align-center.is-grab span.js-grab.a-grab i.fa-solid.fa-align-justify diff --git a/app/views/admin/faq_categories/new.html.slim b/app/views/admin/faq_categories/new.html.slim index 02168ba3c70..bb828e97dbc 100644 --- a/app/views/admin/faq_categories/new.html.slim +++ b/app/views/admin/faq_categories/new.html.slim @@ -1,11 +1,13 @@ -- title '管理ページ' +- title 'FAQカテゴリー追加' header.page-header .container .page-header__inner - h1.page-header__title = title + h1.page-header__title + | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -18,8 +20,8 @@ main.page-main .page-main-header-actions ul.page-main-header-actions__items li.page-main-header-actions__item - = link_to 'FAQカテゴリー一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' + = link_to 'カテゴリー一覧', admin_faq_categories_path, class: 'a-button is-sm is-block is-secondary is-back' hr.a-border .page-body - .container.is-xl + .container.is-md = render 'form', faq_category: @faq_category diff --git a/app/views/admin/faqs/_faq_tabs.html.slim b/app/views/admin/faqs/_faq_tabs.html.slim new file mode 100644 index 00000000000..14e33cc9e3b --- /dev/null +++ b/app/views/admin/faqs/_faq_tabs.html.slim @@ -0,0 +1,11 @@ +nav.tab-nav + .container + ul.tab-nav__items + li.tab-nav__item + = link_to 'カテゴリー', + admin_faq_categories_path, + class: "tab-nav__item-link #{current_link(/^admin-faq_categories/)}" + li.tab-nav__item + = link_to 'FAQ', + admin_faqs_path, + class: "tab-nav__item-link #{current_link(/^admin-faqs/)}" diff --git a/app/views/admin/faqs/edit.html.slim b/app/views/admin/faqs/edit.html.slim index 08b20b8ef6e..6d3290aeecc 100644 --- a/app/views/admin/faqs/edit.html.slim +++ b/app/views/admin/faqs/edit.html.slim @@ -7,6 +7,7 @@ header.page-header | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -14,7 +15,7 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title - | FAQ一覧 + | FAQ編集 .page-main-header__end .page-header-actions .page-header-actions__items diff --git a/app/views/admin/faqs/index.html.slim b/app/views/admin/faqs/index.html.slim index df3f68fd269..e4d62320ba0 100644 --- a/app/views/admin/faqs/index.html.slim +++ b/app/views/admin/faqs/index.html.slim @@ -1,11 +1,13 @@ -- title '管理ページ' +- title 'FAQ一覧' header.page-header .container .page-header__inner - h1.page-header__title = title + h1.page-header__title + | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -20,25 +22,37 @@ main.page-main .page-header-actions__item = link_to new_admin_faq_path, class: 'a-button is-md is-secondary is-block' do i.fa-regular.fa-plus - | FAQ追加 + span + | FAQ追加 hr.a-border .page-body - .container.is-xl + .container.is-lg - @faq_categories.each do |faq_category| - h2 = faq_category.name + .categories-item + header.categories-item__header + h2.categories-item__title + = link_to admin_faq_category_faqs_path(faq_category), class: 'a-hover-link' do + | #{faq_category.name}(#{faq_category.faqs.size}) - - if faq_category.faqs.size.positive? - .admin-table - table.admin-table__table - thead.admin-table__header - tr.admin-table__labels - th.admin-table__label 質問 - th.admin-table__label 編集 - tbody.admin-table__items - - faq_category.faqs.each do |faq| - tr.admin-table__item - td.admin-table__item-value - = link_to format_question(faq.question), admin_faq_path(faq) - td.admin-table__item-value.is-text-align-center - = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do - i.fa-solid.fa-pen + - if faq_category.faqs.size.positive? + .categories-item__body + .admin-table + table.admin-table__table + thead.admin-table__header + tr.admin-table__labels + th.admin-table__label 質問 + th.admin-table__label 編集 + tbody.admin-table__items + - faq_category.faqs.each do |faq| + tr.admin-table__item + td.admin-table__item-value + = link_to format_question(faq.question), admin_faq_path(faq) + td.admin-table__item-value.is-text-align-center + = link_to edit_admin_faq_path(faq), class: 'a-button is-sm is-secondary is-icon' do + i.fa-solid.fa-pen + - else + .o-empty-message + .o-empty-message__icon + i.fa-regular.fa-sad-tear + .o-empty-message__text + | FAQはまだありません。 diff --git a/app/views/admin/faqs/new.html.slim b/app/views/admin/faqs/new.html.slim index bc35c446241..3d325b743a3 100644 --- a/app/views/admin/faqs/new.html.slim +++ b/app/views/admin/faqs/new.html.slim @@ -6,6 +6,7 @@ header.page-header h1.page-header__title = title = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -18,7 +19,8 @@ main.page-main .page-main-header-actions ul.page-main-header-actions__items li.page-main-header-actions__item - = link_to 'FAQ一覧', admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' + = link_to admin_faqs_path, class: 'a-button is-sm is-block is-secondary is-back' do + | FAQ一覧 hr.a-border .page-body .container.is-xl diff --git a/app/views/admin/faqs/show.html.slim b/app/views/admin/faqs/show.html.slim index 8ced5e19e25..142bab1b034 100644 --- a/app/views/admin/faqs/show.html.slim +++ b/app/views/admin/faqs/show.html.slim @@ -1,11 +1,13 @@ -- title '管理ページ' +- title 'FAQ詳細' header.page-header .container .page-header__inner - h1.page-header__title = title + h1.page-header__title + | 管理ページ = render 'admin/admin_page_tabs' += render 'admin/faqs/faq_tabs' main.page-main header.page-main-header @@ -13,7 +15,7 @@ main.page-main .page-main-header__inner .page-main-header__start h1.page-main-header__title - | FAQ 詳細 + | FAQ詳細 .page-main-header__end .page-main-header-actions ul.page-main-header-actions__items @@ -22,47 +24,54 @@ main.page-main | FAQ一覧 hr.a-border .page-body - .container.is-xxl - .row.justify-center - .col-xl-7.col-xs-12 - .page-content - header.page-content-header - // - .page-content-header__start - .page-content-header__user - = render 'users/icon', user: @faq.user, link_class: 'page-content-header__user-link', image_class: 'page-content-header__user-icon' - .page-content-header__end - .page-content-header__row - // - .page-content-header__before-title - = link_to @faq.user, class: 'a-user-name' do - = @faq.user.long_name - h1.page-content-header__title - = format_question(@faq.question) + .page-body__inner.has-side-nav + .container.is-md + .page-content + header.page-content-header + .page-content-header__end + .page-content-header__row + h1.page-content-header__title + = format_question(@faq.question) - .page-content-header__row - .page-content-header-metas - .page-content-header-metas__start - .page-content-header-metas__meta - .a-meta - | #{l @faq.created_at} 公開 + .page-content-header__row + .page-content-header-metas + .page-content-header-metas__start + .page-content-header-metas__meta + .a-meta + | #{l @faq.created_at} 公開 - .page-content-header__row - .page-content-header-metas - .page-content-header-metas__start - .page-content-header-metas__meta - .a-meta + .page-content-header__row + .page-content-header-metas + .page-content-header-metas__start + .page-content-header-metas__meta + .a-meta + = link_to admin_faq_category_faqs_path(@faq.faq_category) do = t("faq.#{FAQCategory.find_by(id: @faq.faq_category_id).name}") - .a-card - .card-body - .card__description - .js-markdown-view.a-long-text.is-md - = @faq.answer - .card-footer - .card-main-actions - .card-main-actions__items - .card-main-actions__item - = link_to edit_admin_faq_path(@faq), class: 'card-main-actions__action a-button is-sm is-secondary is-block' do - i.fa-solid.fa-pen - | 内容修正 + .a-card + .card-body + .card-body__description + .js-markdown-view.a-long-text.is-md + = @faq.answer + hr.a-border-tint + .card-footer + .card-main-actions + .card-main-actions__items + .card-main-actions__item + = link_to edit_admin_faq_path(@faq), class: 'card-main-actions__action a-button is-sm is-secondary is-block' do + i.fa-solid.fa-pen + | 内容修正 + + nav.a-side-nav + .a-side-nav__inner + header.a-side-nav__header + h2.a-side-nav__title + = link_to admin_faq_category_faqs_path(@faq.faq_category), class: 'a-hover-link' do + = t("faq.#{FAQCategory.find_by(id: @faq.faq_category_id).name}") + hr.a-border + .a-side-nav__body + ul.a-side-nav__items + - @faq.faq_category.faqs.each do |faq| + li.a-side-nav__item + = link_to admin_faq_path(faq), class: 'a-side-nav__item-link' do + = format_question(faq.question) diff --git a/app/views/admin/invitation_url/index.html.slim b/app/views/admin/invitation_url/index.html.slim index 2655a742d1d..e98843ee525 100644 --- a/app/views/admin/invitation_url/index.html.slim +++ b/app/views/admin/invitation_url/index.html.slim @@ -6,6 +6,7 @@ header.page-header h1.page-header__title = title = render 'admin/admin_page_tabs' += render 'admin/users/user_tabs' .page-main header.page-main-header diff --git a/app/views/admin/users/_user_tabs.html.slim b/app/views/admin/users/_user_tabs.html.slim new file mode 100644 index 00000000000..124c40ef245 --- /dev/null +++ b/app/views/admin/users/_user_tabs.html.slim @@ -0,0 +1,11 @@ +nav.tab-nav + .container + ul.tab-nav__items + li.tab-nav__item + = link_to 'ユーザー', + admin_users_path, + class: "tab-nav__item-link #{current_link(/^admin-users/)}" + li.tab-nav__item + = link_to '招待URL', + admin_invitation_url_index_path, + class: "tab-nav__item-link #{current_link(/^admin-invitation_url/)}" diff --git a/app/views/admin/users/edit.html.slim b/app/views/admin/users/edit.html.slim index 91e69dd5320..6adaa5147ea 100644 --- a/app/views/admin/users/edit.html.slim +++ b/app/views/admin/users/edit.html.slim @@ -1,5 +1,12 @@ - title 'ユーザー登録情報変更' -- content_for(:extra_body_classes, 'no-header no-footer') + +header.page-header + .container + .page-header__inner + h1.page-header__title = title + += render 'admin/admin_page_tabs' += render 'admin/users/user_tabs' .auth-form.is-lg.a-card header.auth-form__header diff --git a/app/views/admin/users/index.html.slim b/app/views/admin/users/index.html.slim index b47473c93cb..ef7e651b0a9 100644 --- a/app/views/admin/users/index.html.slim +++ b/app/views/admin/users/index.html.slim @@ -7,6 +7,8 @@ header.page-header = title = render 'admin/admin_page_tabs' += render 'admin/users/user_tabs' + main.page-main header.page-main-header .container diff --git a/app/views/admin/users/password/edit.html.slim b/app/views/admin/users/password/edit.html.slim index de9817723f1..8845f8b316d 100644 --- a/app/views/admin/users/password/edit.html.slim +++ b/app/views/admin/users/password/edit.html.slim @@ -1 +1,12 @@ +- title 'ユーザー登録情報変更' + +header.page-header + .container + .page-header__inner + h1.page-header__title + | 管理ページ + += render 'admin/admin_page_tabs' += render 'admin/users/user_tabs' + = render 'users/password_change', url: admin_user_password_path, user: @user diff --git a/app/views/current_user/password/edit.html.slim b/app/views/current_user/password/edit.html.slim index 138ef167e97..7f7bd27a285 100644 --- a/app/views/current_user/password/edit.html.slim +++ b/app/views/current_user/password/edit.html.slim @@ -1,4 +1,11 @@ - title 'パスワード変更' - set_meta_tags description: 'パスワード変更ページです。' +header.page-header + .container + .page-header__inner + .page-header__start + .page-header__title + = title +hr.a-border = render 'users/password_change', url: current_user_password_path, user: @user diff --git a/app/views/users/_password_change.html.slim b/app/views/users/_password_change.html.slim index 5c59e8cd6c3..6068362a314 100644 --- a/app/views/users/_password_change.html.slim +++ b/app/views/users/_password_change.html.slim @@ -1,13 +1,6 @@ - title 'パスワード変更' - content_for(:extra_body_classes, 'no-footer') -header.page-header - .container - .page-header__inner - .page-header__start - .page-header__title - = title -hr.a-border .auth-form.is-lg .a-card header.auth-form__header diff --git a/app/views/welcome/faq.html.slim b/app/views/welcome/faq.html.slim index ae75756cc80..81fa401f574 100644 --- a/app/views/welcome/faq.html.slim +++ b/app/views/welcome/faq.html.slim @@ -17,7 +17,8 @@ li.lp-page-header-nav__item = link_to new_admin_faq_path, class: 'a-button is-md is-secondary-border is-block' do i.fas.fa-plus - | FAQ追加 + span + | FAQ追加 section.lp-content.is-lp-bg-1.is-top-title .l-container.is-lg .lp-content__inner diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 4ca63f0755d..e0aa5b76cd4 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -310,7 +310,7 @@ ja: answer: 回答 faq_category: カテゴリー faq_category: - name: 名前 + name: カテゴリー名 enums: user: job: diff --git a/db/fixtures/faqs.yml b/db/fixtures/faqs.yml index f6f175af66c..9091355f50c 100644 --- a/db/fixtures/faqs.yml +++ b/db/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faq_category: faq_categories2 + faq_category: faq_categories1 faq2: position: 2 @@ -50,31 +50,31 @@ faq6: position: 6 question: 退会した月は料金が日割りで請求されますか? answer: 退会した月も、日割りでの請求はなく、その月のご利用料金1ヶ月分をお支払い頂きますことをご了承ください。 - faq_category: faq_categories2 + faq_category: faq_categories3 faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faq_category: faq_categories2 + faq_category: faq_categories5 faq8: position: 8 question: 就職先が決まっているのですが、就職までの間学習をしたいです。その場合、参加は可能ですか? answer: はい、そのような場合も参加可能です。実際、フィヨルドブートキャンプは企業の新人研修でも利用されています。もし、企業の研修として利用する場合は法人用のプランがございますのでご連絡ください。 - faq_category: faq_categories2 + faq_category: faq_categories5 faq9: position: 9 question: 転職は考えていないのですが、スキルアップのためプログラミングの勉強がしたいです。その場合、参加は可能ですか? answer: 可能です。フィヨルドブートキャンプは就職できるためのスキルを身につけることを目標にしていますが、就職を必ずしなくてはいけないという縛りはありません。 - faq_category: faq_categories2 + faq_category: faq_categories4 faq10: position: 10 question: 現在、大学に在学中なのですが、参加できますか? answer: 学生でも参加可能です。年齢に制限はありません。 - faq_category: faq_categories2 + faq_category: faq_categories5 faq11: position: 11 @@ -102,13 +102,13 @@ faq14: position: 14 question: 転職エージェントを使って就職活動をすることは可能ですか? answer: はい、就職活動について制限はありません。希望があれば弊社でもエージェントを紹介することも可能です。 - faq_category: faq_categories2 + faq_category: faq_categories4 faq15: position: 15 question: 卒業生が Ruby 界隈で有名な企業に就職していますが、私もそういった企業に就職できますか? answer: 個人によります。弊社と仲良くしてくれてる Ruby 界隈で有名な企業に推薦をする場合もありますが、推薦をする側も責任があるため、誰でも推薦をすることができるとは言えません。ただし、そもそもフィヨルドブートキャンプを卒業することはとても難しく、それを達成できた時点で十分推薦できる人物だと判断することがほとんどです。 - faq_category: faq_categories2 + faq_category: faq_categories4 faq16: position: 16 @@ -118,7 +118,7 @@ faq16: フィヨルドブートキャンプでは、入会時に性別を聞くことはしていないので、正確な数字は出せないのですが、女性比率は男性 : 女性で半々に近いくらい高いです。イベントによっては女性の参加者の方が多いこともあります。\n\n\ たくさんの女性が卒業しプログラマーとして就職し活躍しています。\ " - faq_category: faq_categories2 + faq_category: faq_categories4 faq17: position: 17 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faq_category: faq_categories2 + faq_category: faq_categories4 faq18: position: 18 @@ -139,7 +139,7 @@ faq18: 可能です。\n\n\ 法人でのご利用については[こちら](https://bootcamp.fjord.jp/training)に詳細を記載しております。\ " - faq_category: faq_categories2 + faq_category: faq_categories7 faq19: position: 19 @@ -148,7 +148,7 @@ faq19: 全てのプラクティスを修了したら卒業になります。\n\n\ 最後のプラクティスが自作サービスをリリースする、というものになっています。月に一回行っている卒業式で、自作サービスの発表をしてもらい、その後に卒業証書授与を行っています。\ " - faq_category: faq_categories2 + faq_category: faq_categories6 faq20: position: 20 @@ -157,7 +157,7 @@ faq20: 発行します。\n\n\ Stripe という決済サービスを利用しているのですが、それが発行する領収書をダウンロードすることができます。\ " - faq_category: faq_categories2 + faq_category: faq_categories3 faq21: position: 21 @@ -167,7 +167,7 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faq_category: faq_categories2 + faq_category: faq_categories5 faq22: position: 22 @@ -208,3 +208,10 @@ faq25: answer: |- オンラインのみになります。現在、FBCには教室や学習会場のなどの用意はございません。 faq_category: faq_categories7 + +faq26: + position: 26 + question: 途中でコースの変更はできますか? + answer: |- + 「Railsエンジニアコース」、「フロントエンドエンジニアコース」間のコース変更は可能です。メンターからレビューを受けている途中の課題がないキリのいいタイミングであれば、好きなタイミングで変更をすることができます。変更の回数制限もありません。 + faq_category: faq_categories1 diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index a8a7a5b2395..228d8b53b99 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -8,7 +8,7 @@ faq1: フィヨルドブートキャンプとしては、卒業までの時間が長くなり過ぎないように、泣く泣くカリキュラムを削ったりなどもしているのですが、年々就職希望者に求めるものが増えているので、削っても削っても増えていってしまい、なかなか卒業までの時間を短縮させるのが難しいです。\n\n\ とはいえ、就職した卒業生は、フィヨルドブートキャンプで学んだことで就職後に役に立たなかったことは何一つなかった、と言ってくれてます(自慢)。\ " - faq_category: faq_categories2 + faq_category: faq_categories1 faq2: position: 2 @@ -56,7 +56,7 @@ faq7: position: 7 question: 仕事をしながら学習をしたいのであまり時間が取れないのですがそれでも参加できますか? answer: 学習時間の制限はありませんので、自分のできるペースで学習を進めることができます。ただ、卒業までに時間がかかってしまうと、それだけ合計の料金はかかってしまいます。 - faq_category: faq_categories2 + faq_category: faq_categories5 faq8: position: 8 @@ -130,7 +130,7 @@ faq17: 30代半ばを超えていたら、今持っているスキル + プログラミングスキルを使って、どの会社でどんな仕事をすれば自分の価値を出せるか?そのためには、どのような就活を行うべきかの戦略とプランも考えておく必要があります。\n\n\ また、40代以上に強そうな転職エージェントを探し、予め相談してからフィヨルドブートキャンプを始めるかを検討するのもいいかもしれません。\ " - faq_category: faq_categories2 + faq_category: faq_categories4 faq18: position: 18 From de66a6e36a80fe85293936e71a3af358b1656f78 Mon Sep 17 00:00:00 2001 From: komagata Date: Fri, 15 Nov 2024 07:43:28 +0900 Subject: [PATCH 099/101] =?UTF-8?q?UI=E3=81=AE=E5=A4=89=E6=9B=B4=E3=81=AB?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=BE=93=E3=81=95?= =?UTF-8?q?=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/system/admin/home_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/system/admin/home_test.rb b/test/system/admin/home_test.rb index 83708190852..71a3ae5e711 100644 --- a/test/system/admin/home_test.rb +++ b/test/system/admin/home_test.rb @@ -7,7 +7,7 @@ class Admin::HomeTest < ApplicationSystemTestCase visit_with_auth '/admin', 'komagata' assert_equal '管理ページ | FBC', title - tabs = %w[FAQ FAQカテゴリー お問い合わせ お試し延長 ユーザー 企業 招待URL 管理ページ].sort + tabs = %w[FAQ お問い合わせ お試し延長 ユーザー 企業 管理ページ].sort assert_equal tabs, all('a.page-tabs__item-link').map(&:text).sort assert_no_selector '.page-tabs__item-link', text: 'プラクティス' assert_no_selector '.page-tabs__item-link', text: 'コース' From a4833bca66fe1325dc315a9fed4b0d6517d0b735 Mon Sep 17 00:00:00 2001 From: komagata Date: Fri, 15 Nov 2024 13:30:44 +0900 Subject: [PATCH 100/101] =?UTF-8?q?fixture=E3=81=AB=E4=B8=8D=E8=A6=81?= =?UTF-8?q?=E3=81=AA=E6=96=87=E5=AD=97=E3=81=8C=E6=B7=B7=E5=85=A5=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/fixtures/faqs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/faqs.yml b/test/fixtures/faqs.yml index 228d8b53b99..03dea829725 100644 --- a/test/fixtures/faqs.yml +++ b/test/fixtures/faqs.yml @@ -167,4 +167,4 @@ faq21: フィヨルドブートキャンプは、年齢、性別、本名を伝えることなく利用することができます。フィヨルドブートキャンプ内では、お互いをニックネームで呼び合っています。\n\n\ オンラインイベントの中では、ビデオチャットで顔出しをするイベントもありますが、カメラをオンにすることは強制していません。\ " - faq_category: faq_categories24sdsxcssfdfcvdsxdcvrw + faq_category: faq_categories24 From 4b55446a62841427baf348f3480f58228b66ee0a Mon Sep 17 00:00:00 2001 From: machida Date: Fri, 15 Nov 2024 14:52:48 +0900 Subject: [PATCH 101/101] =?UTF-8?q?=E3=82=B9=E3=83=9E=E3=83=9B=E6=99=82?= =?UTF-8?q?=E3=81=AE=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=81=AE=E5=BE=AE?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/stylesheets/shared/layouts/_container.sass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/stylesheets/shared/layouts/_container.sass b/app/javascript/stylesheets/shared/layouts/_container.sass index 7837a0f6a64..40d4027a56e 100644 --- a/app/javascript/stylesheets/shared/layouts/_container.sass +++ b/app/javascript/stylesheets/shared/layouts/_container.sass @@ -1,6 +1,6 @@ .container width: 100% - max-width: 100vw + max-width: 100% margin-inline: auto +media-breakpoint-up(md) padding-inline: 1.5rem