Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

複数カテゴリーに所属するプラクティスを紐づけた日報の重複表示を修正 #6698

Merged
merged 8 commits into from
Sep 4, 2023

Conversation

djkazunoko
Copy link
Contributor

@djkazunoko djkazunoko commented Jul 2, 2023

Issue

概要

バグの詳細

#6477 (comment)

変更点

  • 日報のプラクティス選択欄の表示形式を[カテゴリー名]プラクティス名からプラクティス名に変更した
    • これにより日報のプラクティス選択欄に同一プラクティスが重複して表示されなくなった
      • [Mac OS X]Terminalの基礎を覚える[UNIX]Terminalの基礎を覚えるTerminalの基礎を覚える
    • 質問のプラクティス選択欄の表示形式も上記に統一した
  • 本番環境のpractices_reportsテーブルに存在する重複レコードを削除するdata-migrateファイルを作成した
  • practices_reportsテーブルの[practice_id, report_id]にユニーク制約を追加した
    • これによりプラクティスの日報一覧(/practices/{ID}/reports)での日報の重複表示がなくなった

変更確認方法

1. バグの再現

以下の手順をmainブランチ上で行う

  1. db/fixtures/categories_practices.ymlに以下を追加
+ categories_practice61:
+   practice: practice2
+   category: category2
+   position: 7
  1. rails db:resetを実行(dbの初期化とseedデータの読み込み)
  2. rails sでサーバーを起動
  3. localhost:3000にアクセスし、kimuraでログイン
  4. 日報テスト日報5ですの編集画面(/reports/730242988/edit)を開く
  5. 日報のプラクティス選択欄の表示形式が[カテゴリー名]プラクティス名になっていることを確認する
  6. 日報のプラクティス選択欄で[Mac OS X]Terminalの基礎を覚える[UNIX]Terminalの基礎を覚えるを選択し、内容変更をクリックして保存する
  7. プラクティスTerminalの基礎を覚えるの日報一覧(/practices/198065840/reports)にアクセスし、編集した日報が重複表示されていることを確認する

※この時点でdb/fixtures/categories_practices.ymlの変更は破棄してok

2. 変更確認

日報

  1. bug/fix-duplicate-practice-reportsをローカルに取り込む
  2. rails dbconsoleでdbに接続し、SELECT * FROM practices_reports;を実行して重複レコードを確認する
  3. rails data:migrate:up VERSION=20230701031415を実行(data-migrate)
  4. rails dbconsoleでdbに接続し、SELECT * FROM practices_reports;を実行して重複レコードが削除されていることを確認する
  5. rails db:migrateを実行
  6. rails sでサーバーを起動
  7. localhost:3000にアクセスし、kimuraでログイン
  8. 日報テスト日報5ですの編集画面(/reports/730242988/edit)を開く
  9. 日報のプラクティス選択欄の表示形式がプラクティス名になっており、選択肢の重複がないことを確認する
  10. プラクティスTerminalの基礎を覚えるの日報一覧(/practices/198065840/reports)にアクセスし、日報の重複表示がないことを確認する

※手順3のdata-migrate実行時にdb/data_schema.rbに生じる差分は無視していい(rubocop実行後に元に戻るため)

質問

  1. 質問作成画面(/questions/new)を開き、プラクティス選択欄の表示形式がプラクティス名になっており、選択肢の重複がないことを確認する
  2. 質問の表示画面(/questions/{ID})で内容修正を選択して編集ブロックを表示させ、プラクティス選択欄の表示形式がプラクティス名になっており、選択肢の重複がないことを確認する

Screenshot

開発環境のデータを表示しています。

変更前

/reports/730242988/edit
issue_6477_before-1

/practices/198065840/reports
issue_6477_before-2

/questions/new
issue_6477_before-3

/questions/{ID}(編集時)
issue_6477_before-4

変更後

/reports/730242988/edit
issue_6477_after-1

/practices/198065840/reports
issue_6477_after-2

/questions/new
issue_6477_after-3

/questions/{ID}(編集時)
issue_6477_after-4

参考

@djkazunoko djkazunoko self-assigned this Jul 2, 2023
@djkazunoko djkazunoko force-pushed the bug/fix-duplicate-practice-reports branch from a2b2b40 to 521200b Compare July 7, 2023 02:59
Comment on lines +6 to +11
DELETE FROM practices_reports
WHERE ctid NOT IN (
SELECT min(ctid)
FROM practices_reports
GROUP BY practice_id, report_id
);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

[practice_id, report_id]の重複レコードを削除して1行だけ残すSQL
ctidの値が最小のレコードを残している
practices_reportsテーブルにはidカラムがないため、PostgreSQLのシステム列であるctidで代用
PostgreSQL: Documentation: 15: 5.5. System Columns

Comment on lines +1 to +6
class AddUniqueConstraintToPracticesReports < ActiveRecord::Migration[6.1]
def change
remove_index :practices_reports, [:practice_id, :report_id]
add_index :practices_reports, [:practice_id, :report_id], unique: true
end
end
Copy link
Contributor Author

Choose a reason for hiding this comment

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

既存のindexにunique: trueだけ追加したい場合、一旦削除して作り直す必要がある(remove_indexadd_index)

@djkazunoko djkazunoko force-pushed the bug/fix-duplicate-practice-reports branch from 521200b to 16915d4 Compare July 9, 2023 01:50
@djkazunoko djkazunoko marked this pull request as ready for review July 11, 2023 03:44
@djkazunoko djkazunoko requested a review from wata00913 July 11, 2023 03:45
@djkazunoko
Copy link
Contributor Author

@wata00913
お疲れ様です!
こちらお手隙の際に、レビューをお願いできますでしょうか🙌

@wata00913
Copy link
Contributor

@djkazunoko
お疲れ様です!
レビュー依頼ありがとうございます。1週間ほど時間を要しますが、大丈夫でしょうか?

@djkazunoko
Copy link
Contributor Author

@wata00913
いつでも大丈夫です〜
よろしくお願いします🙇‍♂️

Comment on lines 3 to 7
user_practices = @categories.flat_map do |category|
category.practices
end

unique_practices = user_practices.uniq
Copy link
Contributor

Choose a reason for hiding this comment

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

5行目のendにuniqをつけた方がシンプルに書けると思いました〜

Suggested change
user_practices = @categories.flat_map do |category|
category.practices
end
unique_practices = user_practices.uniq
unique_practices = @categories.flat_map do |category|
category.practices
end.uniq

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ご確認いただきありがとうございます!
(&:method)を使ってさらにシンプルにしてみました〜
app/helpers/reports_helper.rbも修正しています。
a1298c1

Copy link
Contributor

@wata00913 wata00913 left a comment

Choose a reason for hiding this comment

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

@djkazunoko
レビューお待たせしました🙏

動作確認はOKでした〜
動作手順も分かりやすく、kazunokoさんのセルフレビューを見てDBについて参考になりました!

1点コードについてコメントしましたので、確認をよろしくお願いします🙇‍♂️

@djkazunoko djkazunoko force-pushed the bug/fix-duplicate-practice-reports branch 3 times, most recently from 63175da to a1298c1 Compare July 21, 2023 01:59
Copy link
Contributor

@wata00913 wata00913 left a comment

Choose a reason for hiding this comment

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

@djkazunoko
確認しました、OKです!
Approveさせて頂きます!👍

@djkazunoko
Copy link
Contributor Author

@wata00913
レビューしていただきありがとうございました!

@djkazunoko djkazunoko requested a review from komagata July 24, 2023 23:41
@djkazunoko
Copy link
Contributor Author

@komagata
メンバーレビュー完了しましたので、レビューよろしくお願いします。

json.category category.name
end

unique_practices = @categories.flat_map(&:practices).uniq
Copy link
Member

Choose a reason for hiding this comment

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

viewはなるべく処理をせず見た目に関する部分だけすべきなのでこちらはControllerでやった方が良さそうです。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@komagata
修正しました c9cf0f2

@@ -11,11 +11,7 @@ def practice_options(categories)

def practice_options_within_course
Copy link
Member

Choose a reason for hiding this comment

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

このメソッドのテストが欲しいかなと思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@komagata
修正しました 80fd1e1
プラクティスの並び順、複数カテゴリーに所属する同一プラクティスが存在する場合に重複表示されないことを確認しています。

@komagata
Copy link
Member

@djkazunoko こちらいかがでしょうか

@djkazunoko
Copy link
Contributor Author

@komagata
返信遅れてすいません、現在対応中です。

@djkazunoko djkazunoko force-pushed the bug/fix-duplicate-practice-reports branch from a1298c1 to c9cf0f2 Compare August 26, 2023 03:13
@djkazunoko djkazunoko force-pushed the bug/fix-duplicate-practice-reports branch from ba4bbd1 to 80fd1e1 Compare August 27, 2023 05:23
@djkazunoko
Copy link
Contributor Author

@komagata
修正しましたので、ご確認お願いします。

Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

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

確認させて頂きました。OKです〜🙆‍♂️

@komagata komagata merged commit 7f65173 into main Sep 4, 2023
@komagata komagata deleted the bug/fix-duplicate-practice-reports branch September 4, 2023 08:32
@github-actions github-actions bot mentioned this pull request Sep 4, 2023
8 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants