-
Notifications
You must be signed in to change notification settings - Fork 71
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
Conversation
a2b2b40
to
521200b
Compare
DELETE FROM practices_reports | ||
WHERE ctid NOT IN ( | ||
SELECT min(ctid) | ||
FROM practices_reports | ||
GROUP BY practice_id, report_id | ||
); |
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.
[practice_id, report_id]
の重複レコードを削除して1行だけ残すSQL
ctid
の値が最小のレコードを残している
practices_reports
テーブルにはid
カラムがないため、PostgreSQLのシステム列であるctid
で代用
PostgreSQL: Documentation: 15: 5.5. System Columns
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 |
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.
既存のindexにunique: true
だけ追加したい場合、一旦削除して作り直す必要がある(remove_index
→add_index
)
521200b
to
16915d4
Compare
@wata00913 |
@djkazunoko |
@wata00913 |
user_practices = @categories.flat_map do |category| | ||
category.practices | ||
end | ||
|
||
unique_practices = user_practices.uniq |
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.
5行目のendにuniq
をつけた方がシンプルに書けると思いました〜
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 |
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.
ご確認いただきありがとうございます!
(&:method)
を使ってさらにシンプルにしてみました〜
app/helpers/reports_helper.rb
も修正しています。
a1298c1
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.
@djkazunoko
レビューお待たせしました🙏
動作確認はOKでした〜
動作手順も分かりやすく、kazunokoさんのセルフレビューを見てDBについて参考になりました!
1点コードについてコメントしましたので、確認をよろしくお願いします🙇♂️
63175da
to
a1298c1
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.
@djkazunoko
確認しました、OKです!
Approveさせて頂きます!👍
@wata00913 |
@komagata |
json.category category.name | ||
end | ||
|
||
unique_practices = @categories.flat_map(&:practices).uniq |
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.
viewはなるべく処理をせず見た目に関する部分だけすべきなのでこちらはControllerでやった方が良さそうです。
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.
@@ -11,11 +11,7 @@ def practice_options(categories) | |||
|
|||
def practice_options_within_course |
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.
このメソッドのテストが欲しいかなと思います。
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.
@djkazunoko こちらいかがでしょうか |
@komagata |
表示形式を [カテゴリー名]プラクティス名 から プラクティス名 に変更 質問作成画面にも反映されてる
日報のプラクティス選択の表示形式と統一した
a1298c1
to
c9cf0f2
Compare
ba4bbd1
to
80fd1e1
Compare
@komagata |
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.
確認させて頂きました。OKです〜🙆♂️
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ブランチ上で行う
db/fixtures/categories_practices.yml
に以下を追加rails db:reset
を実行(dbの初期化とseedデータの読み込み)rails s
でサーバーを起動localhost:3000
にアクセスし、kimura
でログインテスト日報5です
の編集画面(/reports/730242988/edit
)を開く[カテゴリー名]プラクティス名
になっていることを確認する[Mac OS X]Terminalの基礎を覚える
と[UNIX]Terminalの基礎を覚える
を選択し、内容変更
をクリックして保存するTerminalの基礎を覚える
の日報一覧(/practices/198065840/reports
)にアクセスし、編集した日報が重複表示されていることを確認する※この時点で
db/fixtures/categories_practices.yml
の変更は破棄してok2. 変更確認
日報
bug/fix-duplicate-practice-reports
をローカルに取り込むrails dbconsole
でdbに接続し、SELECT * FROM practices_reports;
を実行して重複レコードを確認するrails data:migrate:up VERSION=20230701031415
を実行(data-migrate)rails dbconsole
でdbに接続し、SELECT * FROM practices_reports;
を実行して重複レコードが削除されていることを確認するrails db:migrate
を実行rails s
でサーバーを起動localhost:3000
にアクセスし、kimura
でログインテスト日報5です
の編集画面(/reports/730242988/edit
)を開くプラクティス名
になっており、選択肢の重複がないことを確認するTerminalの基礎を覚える
の日報一覧(/practices/198065840/reports
)にアクセスし、日報の重複表示がないことを確認する※手順3のdata-migrate実行時に
db/data_schema.rb
に生じる差分は無視していい(rubocop実行後に元に戻るため)質問
/questions/new
)を開き、プラクティス選択欄の表示形式がプラクティス名
になっており、選択肢の重複がないことを確認する/questions/{ID}
)で内容修正
を選択して編集ブロックを表示させ、プラクティス選択欄の表示形式がプラクティス名
になっており、選択肢の重複がないことを確認するScreenshot
開発環境のデータを表示しています。
変更前
/reports/730242988/edit
/practices/198065840/reports
/questions/new
/questions/{ID}
(編集時)変更後
/reports/730242988/edit
/practices/198065840/reports
/questions/new
/questions/{ID}
(編集時)参考
app/views/reports/_form.html.slim