-
Notifications
You must be signed in to change notification settings - Fork 75
プロフィールページの選択入力の研修感想がハッシュ展開のような表示になっている #9067 #9222
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Walkthroughユーザー詳細の「研修完了情報」表示で、満足度(satisfaction)がnilの場合に「未入力」を表示する条件分岐を追加。併せて、この挙動を検証するシステムテストを新規追加。 Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor U as User (Browser)
participant C as UsersController
participant V as _training_completion_info.html.slim
participant M as User Model
U->>C: ユーザー詳細ページをリクエスト
C->>M: ユーザー読み込み
M-->>C: User インスタンス
C->>V: 部分テンプレートをレンダリング
alt satisfaction が nil
V-->>U: 「未入力」を表示
else satisfaction が存在
V-->>U: 翻訳済み満足度を表示
end
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
app/controllers/training_completion_controller.rb(1 hunks)app/views/users/_training_completion_info.html.slim(1 hunks)test/system/training_completion_test.rb(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.rb
⚙️ CodeRabbit configuration file
**/*.rb: # refactoring
- まずFat Controllerを避け、次にFat Modelを避ける。
- Serviceクラスの乱用を避ける。
- controller concernを作ろうとしたらPORO(Plain Old Ruby Object)やActiveRecordモデルでの実装で代替できないか検討する。
Rails Patterns
- ViewHelperにメソッドを実装する時にはまずDecoratorパターンを使うことを検討する。(active_decorator gemを導入しているのでそれを使う)
- 複雑なActiveRecordクエリがあり、再利用できそうな場合はQueryObjectパターンを検討する。(rails-patterns gemを導入しているのでそれのQuery機能を使う)
- Viewにpartialを作る場合はViewComponentを使うことを検討する。
- 複数のActiveRecordモデルを操作する1つの責務がある時や外部APIとやりとりする処理がある場合にはInteractorオブジェクトパターンを検討する。(interactor gemを導入しているのでそれを使う)
- 複数のInteractorを実行するような処理がある場合Organizerオブジェクトパターンを検討する。(interactor gemを導入しており、その中にOrganizerの機能があるので使う)
Files:
test/system/training_completion_test.rbapp/controllers/training_completion_controller.rb
test/**/*
⚙️ CodeRabbit configuration file
test/**/*: # Test
- TestCase名は英語で書く。
- どうしても避けられない時以外にsystem testでsleepは使わない。
Unit Test
model, helper, decorator, view_componentについてはメソッドを追加した場合は必ず対応したUnit TestのTestCaseを1つは書く。
Files:
test/system/training_completion_test.rb
🧬 Code graph analysis (1)
app/controllers/training_completion_controller.rb (1)
app/controllers/user_sessions_controller.rb (1)
new(6-8)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build_and_test
🔇 Additional comments (3)
app/views/users/_training_completion_info.html.slim (1)
14-14: LGTM! nil チェックでハッシュ展開のような表示を防止しています。三項演算子を使用して
satisfactionが nil の場合に「未入力」を表示し、値がある場合は翻訳済みの enum 値を表示する実装は適切です。PR の目的であるバグ修正が正しく行われています。app/controllers/training_completion_controller.rb (1)
9-11: LGTM! フォームの初期値設定として適切な実装です。
||=演算子を使用してsatisfactionが未設定の場合のみ「良い」に初期化する実装は、フォームのデフォルト値を設定する一般的なパターンであり、適切です。データベースへの保存は行わず、メモリ上での初期化のみを行っているため、Fat Controller にもなっていません。test/system/training_completion_test.rb (1)
166-169: LGTM! フォームの初期状態を適切にテストしています。テスト名が英語で記述されており、コーディングガイドラインに準拠しています。
assert_checked_fieldを使用して「良い」オプションがプリセレクトされていることを検証する実装は適切です。
3208bc3 to
f8bd4f6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
app/views/users/_training_completion_info.html.slim (1)
14-14: バグ修正が適切に実装されています。
satisfactionがnilの場合に「未入力」を表示するガード処理により、ハッシュ展開のような表示バグが修正されています。三項演算子の使用も適切です。任意の改善案として、コーディングガイドラインに従い、この表示ロジックを Decorator パターン(
active_decoratorgem)でカプセル化することも検討できます。ただし、現在のシンプルな実装で十分です。任意のリファクタリング例:
app/decorators/user_decorator.rbにメソッドを追加する場合:def formatted_satisfaction satisfaction.nil? ? '未入力' : I18n.t("activerecord.enums.user.satisfaction.#{satisfaction}") endビューでは以下のように使用:
= user.formatted_satisfactionただし、この変更は現時点では必須ではありません。
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
app/controllers/training_completion_controller.rb(1 hunks)app/views/users/_training_completion_info.html.slim(1 hunks)test/system/training_completion_test.rb(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- test/system/training_completion_test.rb
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rb
⚙️ CodeRabbit configuration file
**/*.rb: # refactoring
- まずFat Controllerを避け、次にFat Modelを避ける。
- Serviceクラスの乱用を避ける。
- controller concernを作ろうとしたらPORO(Plain Old Ruby Object)やActiveRecordモデルでの実装で代替できないか検討する。
Rails Patterns
- ViewHelperにメソッドを実装する時にはまずDecoratorパターンを使うことを検討する。(active_decorator gemを導入しているのでそれを使う)
- 複雑なActiveRecordクエリがあり、再利用できそうな場合はQueryObjectパターンを検討する。(rails-patterns gemを導入しているのでそれのQuery機能を使う)
- Viewにpartialを作る場合はViewComponentを使うことを検討する。
- 複数のActiveRecordモデルを操作する1つの責務がある時や外部APIとやりとりする処理がある場合にはInteractorオブジェクトパターンを検討する。(interactor gemを導入しているのでそれを使う)
- 複数のInteractorを実行するような処理がある場合Organizerオブジェクトパターンを検討する。(interactor gemを導入しており、その中にOrganizerの機能があるので使う)
Files:
app/controllers/training_completion_controller.rb
🧬 Code graph analysis (1)
app/controllers/training_completion_controller.rb (1)
app/controllers/user_sessions_controller.rb (1)
new(6-8)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build_and_test
🔇 Additional comments (1)
app/controllers/training_completion_controller.rb (1)
9-11: デフォルト値の設定ロジックは適切です。‘good’ は User モデルの satisfaction enum に定義されています。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
test/system/training_completion_test.rb (1)
157-164: テストの前提条件を明示的に設定することを検討してください。テストの構造と英語の命名規則への準拠は適切です。ただし、研修終了情報セクションが表示されるためには
training_completed_atが設定されている必要があります。現在のテストは:kensyuowataフィクスチャがこの値を持っていることを前提としていますが、より堅牢にするため、テスト内で明示的に設定することを推奨します。以下のように修正することで、テストの意図がより明確になります:
test 'shows not entered when satisfaction is nil' do user = users(:kensyuowata) - user.update!(satisfaction: nil) + user.update!(satisfaction: nil, training_completed_at: Time.current) visit_with_auth "/users/#{user.id}", 'komagata' assert_text '研修終了情報(非公開)' assert_text '未入力' endこれにより、フィクスチャの状態に依存せず、テストの前提条件が明確になります。
Based on coding guidelines
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
test/system/training_completion_test.rb(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.rb
⚙️ CodeRabbit configuration file
**/*.rb: # refactoring
- まずFat Controllerを避け、次にFat Modelを避ける。
- Serviceクラスの乱用を避ける。
- controller concernを作ろうとしたらPORO(Plain Old Ruby Object)やActiveRecordモデルでの実装で代替できないか検討する。
Rails Patterns
- ViewHelperにメソッドを実装する時にはまずDecoratorパターンを使うことを検討する。(active_decorator gemを導入しているのでそれを使う)
- 複雑なActiveRecordクエリがあり、再利用できそうな場合はQueryObjectパターンを検討する。(rails-patterns gemを導入しているのでそれのQuery機能を使う)
- Viewにpartialを作る場合はViewComponentを使うことを検討する。
- 複数のActiveRecordモデルを操作する1つの責務がある時や外部APIとやりとりする処理がある場合にはInteractorオブジェクトパターンを検討する。(interactor gemを導入しているのでそれを使う)
- 複数のInteractorを実行するような処理がある場合Organizerオブジェクトパターンを検討する。(interactor gemを導入しており、その中にOrganizerの機能があるので使う)
Files:
test/system/training_completion_test.rb
test/**/*
⚙️ CodeRabbit configuration file
test/**/*: # Test
- TestCase名は英語で書く。
- どうしても避けられない時以外にsystem testでsleepは使わない。
Unit Test
model, helper, decorator, view_componentについてはメソッドを追加した場合は必ず対応したUnit TestのTestCaseを1つは書く。
Files:
test/system/training_completion_test.rb
🧠 Learnings (3)
📚 Learning: 2025-09-04T01:39:22.261Z
Learnt from: Miya096jp
PR: fjordllc/bootcamp#9102
File: app/controllers/mentor/buzzes_controller.rb:0-0
Timestamp: 2025-09-04T01:39:22.261Z
Learning: fjordllc/bootcamp プロジェクトでは、更新処理の成功時の通知メッセージについて、I18n を使用せずに日本語文字列を直接記述する方針で一貫性を保っている。
Applied to files:
test/system/training_completion_test.rb
📚 Learning: 2025-06-29T03:44:15.179Z
Learnt from: hirokiej
PR: fjordllc/bootcamp#8740
File: app/helpers/reports_helper.rb:56-64
Timestamp: 2025-06-29T03:44:15.179Z
Learning: このプロジェクト(fjordllc/bootcamp)では、ja.ymlファイルで一部の単語や文章のみI18n対応されているが、多くのテキストは日本語でハードコーディングされており、完全な国際化対応は行われていない。新しい機能でもI18n対応は不要と判断される。
Applied to files:
test/system/training_completion_test.rb
📚 Learning: 2025-07-23T20:42:19.974Z
Learnt from: jun-kondo
PR: fjordllc/bootcamp#0
File: :0-0
Timestamp: 2025-07-23T20:42:19.974Z
Learning: fjordllc/bootcampプロジェクトでは、hタグ(見出し)の文言は日本語でハードコーディングする方針が確立されており、I18n対応は行わない。例:app/views/welcome/logo.html.slimでh2、h3タグが日本語でハードコーディングされている。
Applied to files:
test/system/training_completion_test.rb
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build_and_test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
app/controllers/reports/unchecked_controller.rb (1)
4-4: 定数の重複を確認してください。
PAGER_NUMBER = 25がapp/controllers/reports_controller.rbと重複しています。共通の定数としてApplicationControllerや専用の concern に抽出することを検討してください。例えば、以下のように共通化できます:
# app/controllers/concerns/paginatable.rb module Paginatable extend ActiveSupport::Concern PAGER_NUMBER = 25 endその後、各コントローラで:
class Reports::UncheckedController < ApplicationController include Paginatable # ... end
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (20)
app/controllers/api/admin/count_controller.rb(1 hunks)app/controllers/reports/unchecked_controller.rb(1 hunks)app/controllers/reports_controller.rb(0 hunks)app/helpers/meta_tags_helper.rb(2 hunks)app/javascript/stylesheets/lp/blocks/lp/_lp-price.sass(3 hunks)app/javascript/stylesheets/lp/layouts/_l-cards.sass(1 hunks)app/views/home/_unchecked_report_alert.html.slim(1 hunks)app/views/reports/index.html.slim(2 hunks)app/views/welcome/_pricing.html.slim(1 hunks)app/views/welcome/certified_reskill_courses/rails_developer_course/_course_fees.html.slim(4 hunks)app/views/welcome/certified_reskill_courses/rails_developer_course/_course_overview.html.slim(2 hunks)app/views/welcome/index.html.slim(1 hunks)app/views/welcome/law.html.slim(1 hunks)app/views/welcome/pricing.html.slim(2 hunks)app/views/welcome/training.html.slim(2 hunks)config/routes/reports.rb(1 hunks)test/system/admin/campaigns_test.rb(1 hunks)test/system/articles_test.rb(1 hunks)test/system/markdown_test.rb(1 hunks)test/system/reports_practice_filter_test.rb(0 hunks)
💤 Files with no reviewable changes (2)
- app/controllers/reports_controller.rb
- test/system/reports_practice_filter_test.rb
✅ Files skipped from review due to trivial changes (2)
- test/system/admin/campaigns_test.rb
- app/views/welcome/law.html.slim
🧰 Additional context used
📓 Path-based instructions (2)
**/*.rb
⚙️ CodeRabbit configuration file
**/*.rb: # refactoring
- まずFat Controllerを避け、次にFat Modelを避ける。
- Serviceクラスの乱用を避ける。
- controller concernを作ろうとしたらPORO(Plain Old Ruby Object)やActiveRecordモデルでの実装で代替できないか検討する。
Rails Patterns
- ViewHelperにメソッドを実装する時にはまずDecoratorパターンを使うことを検討する。(active_decorator gemを導入しているのでそれを使う)
- 複雑なActiveRecordクエリがあり、再利用できそうな場合はQueryObjectパターンを検討する。(rails-patterns gemを導入しているのでそれのQuery機能を使う)
- Viewにpartialを作る場合はViewComponentを使うことを検討する。
- 複数のActiveRecordモデルを操作する1つの責務がある時や外部APIとやりとりする処理がある場合にはInteractorオブジェクトパターンを検討する。(interactor gemを導入しているのでそれを使う)
- 複数のInteractorを実行するような処理がある場合Organizerオブジェクトパターンを検討する。(interactor gemを導入しており、その中にOrganizerの機能があるので使う)
Files:
app/helpers/meta_tags_helper.rbconfig/routes/reports.rbtest/system/markdown_test.rbtest/system/articles_test.rbapp/controllers/api/admin/count_controller.rbapp/controllers/reports/unchecked_controller.rb
test/**/*
⚙️ CodeRabbit configuration file
test/**/*: # Test
- TestCase名は英語で書く。
- どうしても避けられない時以外にsystem testでsleepは使わない。
Unit Test
model, helper, decorator, view_componentについてはメソッドを追加した場合は必ず対応したUnit TestのTestCaseを1つは書く。
Files:
test/system/markdown_test.rbtest/system/articles_test.rb
🧠 Learnings (1)
📚 Learning: 2025-09-12T01:00:58.452Z
Learnt from: Miya096jp
PR: fjordllc/bootcamp#9102
File: app/views/mentor/buzzes/edit.html.slim:1-0
Timestamp: 2025-09-12T01:00:58.452Z
Learning: app/views/mentor/buzzes/edit.html.slim では `- title` と `- set_meta_tags` の両方が正しく設定されており、タイトルは削除されていない。変更内容はメタディスクリプションの追加のみ。
Applied to files:
test/system/articles_test.rb
🧬 Code graph analysis (1)
app/controllers/reports/unchecked_controller.rb (2)
app/controllers/reports_controller.rb (1)
index(16-19)app/controllers/concerns/authentication/login_helpers.rb (1)
admin_or_mentor_login?(27-29)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build_and_test
🔇 Additional comments (25)
app/javascript/stylesheets/lp/layouts/_l-cards.sass (2)
4-7: レスポンシブなギャップの追加は適切です。ブレークポイントごとに適切なギャップ値が設定されており、レイアウトの改善として問題ありません。
38-38: ビューポート幅を考慮したmax-widthの設定は適切です。
calc(100vw - 2rem)により、小画面でのはみ出しを防ぐ実装になっています。test/system/markdown_test.rb (1)
18-20: テストのスキップは意図的なものです。
markdown-it-purifierの問題が解決されるまで一時的にスキップしており、メッセージも明確です。問題が解決したら、このテストを有効化することを忘れないようにしてください。app/controllers/api/admin/count_controller.rb (1)
10-10: 研修完了ユーザーを除外するフィルタ条件の追加は適切です。
training_completed_at: nilの追加により、研修完了済みのユーザーをアクティブユーザー数から除外する実装になっており、他のフィルタ条件と一貫性があります。app/views/welcome/_pricing.html.slim (2)
17-22: 料金表示の更新と税込表示の追加は適切です。月額料金が32,780円に更新され、税込表示も明示的に追加されています。ユーザーにとって分かりやすい表示になっています。
26-26: 法人利用料金の更新も適切です。個人向け料金の改定に合わせて、法人利用料金も109,780円(税込)に更新されており、一貫性があります。
config/routes/reports.rb (1)
4-6: 未チェック日報用のルーティング追加は適切です。名前空間を使った構造で、RESTfulな設計になっています。
reports_unchecked_index_pathというルートヘルパーが利用可能になります。app/views/home/_unchecked_report_alert.html.slim (1)
10-10: ルートヘルパーの使用への変更は良い改善です。ハードコードされたパス
'/reports/unchecked'からreports_unchecked_index_pathへの変更により、ルート構造の変更に対して保守性が向上しています。app/views/reports/index.html.slim (3)
23-25: コントローラーパスベースのナビゲーション判定への変更は良い改善です。
params[:unchecked]ではなくcontroller_pathを使用することで、ルーティング構造に基づいた堅牢な実装になっています。新しいReports::UncheckedControllerとの統合も適切です。
26-26: フィルターフォームの条件分岐の更新は適切です。
controller_pathを使用した一貫性のある条件判定になっています。
47-48: メンター向け一括操作機能の条件付きレンダリングは適切です。
mentor_login?とcontroller_pathの組み合わせにより、適切な権限チェックと画面判定が行われています。app/views/welcome/certified_reskill_courses/rails_developer_course/_course_fees.html.slim (3)
23-26: 受講料のタイトル簡略化と価格更新は適切です。「受講料 + 教材費」から「受講料」への変更により表示がシンプルになり、価格も786,720円(税込)に正しく更新されています。
51-58: 給付金額の更新は正確です。786,720円の80%である629,376円が正しく計算・表示されています。
69-76: 自己負担額の更新は正確です。786,720円 - 629,376円 = 157,344円の計算が正しく反映されています。
app/views/welcome/certified_reskill_courses/rails_developer_course/_course_overview.html.slim (1)
76-88: 変更内容を承認します。受講料の更新と税込表記の追加、および教材費の変動に関する注記の追加は適切です。用語の統一(授業料→受講料)も改善として評価できます。
app/javascript/stylesheets/lp/blocks/lp/_lp-price.sass (1)
12-81: スタイル変更を承認します。価格表示の強化と税込表記の強調のための変更は適切です。新しい
.is-totalモディファイアと関連するコンポーネントブロック(.lp-price__per-person、.lp-price__tax、.lp-price__total-value)の追加により、価格表示の柔軟性が向上しています。レスポンシブ対応も適切に実装されています。app/controllers/reports/unchecked_controller.rb (1)
7-11: 実装を承認します。未確認レポートの専用コントローラへの分離は適切です。アクセス制御、ページネーション、共有ビューの使用も正しく実装されています。
test/system/articles_test.rb (1)
268-268: テストの更新を承認します。メタディスクリプションのテストアサーションが新しい価格(32,780円(税込))を正しく反映しています。
app/views/welcome/pricing.html.slim (2)
6-6: メタディスクリプションの更新を承認します。新しい価格(32,780円(税込))を反映したメタディスクリプションは適切です。
48-57: 価格表示の更新を承認します。一般利用の月額料金(32,780円)および法人向け料金(109,780円)への更新は正しく反映されています。税込表記も明確です。
app/helpers/meta_tags_helper.rb (2)
10-10: デフォルトメタタグの更新を承認します。新しい価格(32,780円(税込))を反映したディスクリプションは適切です。OGPとTwitterカードでも正しく使用されます。
34-34: Welcomeメタタグの更新を承認します。welcome_meta_tags メソッドのディスクリプションも新しい価格に正しく更新されています。
app/views/welcome/index.html.slim (2)
2-2: メタディスクリプションの更新を承認します。新しい価格(32,780円(税込))への更新は適切です。
3-5: formrun.js の参照はこのファイルのみです。フォーム機能がこのスクリプトに依存していないか、動作確認をお願いします。app/views/welcome/training.html.slim (1)
303-327: 価格表示の再構築を承認します。法人向け価格表示の改善は適切です:
- コンテナサイズの拡大(is-md → is-lg)により、情報の視認性が向上しています
- 「1名につき月額」の明示により、料金体系がより明確になっています
- 一般利用との比較リンクの追加は、ユーザーにとって有用です
- 新しい価格(109,780円(税込)および32,780円(税込))が正しく反映されています
変更は
_lp-price.sassのスタイル更新とも整合性が取れています。
1cbaf8e to
b2fb43f
Compare
|
@karlley |
|
@zamami |
|
@karlley もし、お仕事の都合でレビューが厳しくなりましたらいつでも気軽にご連絡ください。 |
|
@zamami |
karlley
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
お待たせしました!
修正内容に関する確認です。
研修終了ユーザー(id: 782540538)でログインしたところ研修終了手続きのデフォルト値が設定されていませんでした。
そのため、動作確認手順での確認ができていない状況です。
上記2点を踏まえて以下を教えていただきたいです。
issueを見る限り以下の2点の修正が当PRには含まれるという認識で正しいでしょうか?
・user.satisfaction がnilだった場合「未入力」と表示させる。(もしくは空白?)
・研修終了手続きフォームにデフォルト値を入れる(「どちらでもない」にチェックを入れたほうがいい?)
もし、修正の方針がどちらか片方のみに変更になっている場合、経緯と詳細を教えてください。
お手数おかけしますが確認お願いいたします🙇♂️
|
@karlley PRの概要を修正しますので少々お待ちください。 |
Issue
概要
・一部研修ユーザーにおいて、プロフィールページの選択入力の研修感想がハッシュ展開のような表示になっているバグを修正。
変更確認方法
1.
git fetch origin bug/profile-hash-displayを実行してブランチをbug/profile-hash-displayに変更する。2.
foreman start -f Procfile.devでサーバーを立ち上げる。3. 研修中のユーザーでログインし、http://localhost:3000/training_completion/new にアクセス。
4. 「全体の満足度を教えてください」の項目の中で「良い」にチェックが入っていることを確認する。
Summary by CodeRabbit
バグ修正
テスト