Conversation
69b282e to
b3cbcaa
Compare
|
@ayu-0505 連絡ありがとうございます!デザイン了解ですー |
|
@ayu-0505 |
|
@SuzukiShuntarou こちらのPRについて、レビューをお願いできますでしょうか。 |
|
@machida |
|
@ayu-0505 |
|
@SuzukiShuntarou |
|
@ayu-0505 確認事項
実施した内容
|
9e80aca to
8c991eb
Compare
|
@SuzukiShuntarou エラーで立ち上がらない件についておそらくご推測のとおり 町田さんのデザイン終了時点では立ち上がったので、問題ないと判断してしまいました。 この対応にて、問題が解消したかどうか、お手数ですが再度ご確認願えますでしょうか🙇🏻♀️ |
|
@ayu-0505 |
app/models/article.rb
Outdated
| return unless errors.any? | ||
|
|
||
| self.published_at = nil | ||
| end |
There was a problem hiding this comment.
申し訳ございません。🙇♀️
こちらのメソッドをafter_validationを実施している理由についてご教示いただけないでしょうか?対応するコミットを見てみたのですが、どういう状況で発生する問題(本来の初回投稿時の時間と齟齬が出る問題)なのかがわかりませんでした。お手数をおかけしますがよろしくお願いいたします。
また、関連して以下のような動作となるのですが、こちらは正しいのでしょうか?(実際にこういう動作があるかの判断も難しいため、直す必要があるかはご確認いただければ幸いです。)
- 公開済のブログ記事の更新時にバリデーションエラーが発生した場合、通知ターゲットが再度表示される。
app/views/articles/_form.html.slimの142行目でif article.before_initial_publish?としているため、after_validationでnil更新されるとbefore_initial_publish?がtrueとなり、通知ターゲットが再度表示されるのだと思われます。
development._.FJORD.BOOT.CAMP.-.Google.Chrome.2025-03-17.15-32-28.mp4
There was a problem hiding this comment.
ありがとうございます!
このメソッドは結局変更してしまったのですが、お答えします〜。
まさしく、動画であげていただいたような「バリデーションエラーで編集画面に戻ったのにbefore_validationによってDB保存前にpublished_atが入ってしまう状態」を、初回投稿前に防ぐ意図として作成していました。
上記のような動作でpublished_atが入り、仮に時間を開けてから初回投稿を行うと、「実際の初回投稿時間とバリデーションエラー時にすでに入ったpublished_atとの間で齟齬が出てしまう」、ということで本来の初回投稿時の時間と齟齬が出る問題 とコミットメッセージを残しました。
published_atは後から変更できるので、published_atにとっては時間がずれることはそこまで問題ではないのですが、published_atを表示の条件としている通知ターゲットにとっては致命的だったのでafter_validationで元に戻すようにしていました。
(初回投稿前なのに通知ターゲットが選択不可になってしまう)
しかし、Suzukiさんのご指摘の通り、投稿済みの編集画面でもafter_validationが発動してしまい、通知ターゲットが意図せず表示されるようになってしまったので修正いたしました。
| assert_not articles(:article1).before_initial_publish? | ||
| assert articles(:article3).before_initial_publish? | ||
| end | ||
|
|
There was a problem hiding this comment.
今回追加したプライベートメソッドのreset_published_at_if_invalidのテストが追加されていないように見受けられました。プライベートメソッドなので間接的にテストをする必要があるかと思ったのですが、いかがでしょうか?
There was a problem hiding this comment.
ありがとうございます、ご指摘の通りだと思います〜。
「プライベートメソッドは直接的なテストを作らず、パブリックメソッド経由で間接的にテストする」というのがプライベートメソッドにおける基本的な考え方だと思われますが、前半部の「プライベートメソッドは直接的なテストを作らない」だけが意識に残ってしまい、失念しておりました🙇🏻♀️
変更の過程でプライベートメソッドは削除してしまったのですが、改めて復習になりました🙏
|
@ayu-0505 |
4633238 to
f211ac6
Compare
| end | ||
|
|
||
| def before_initial_publish? | ||
| attribute_in_database(:published_at).nil? |
There was a problem hiding this comment.
published_atがnilであるか( ≒ 初回投稿前であるか)について、オブジェクト自体のpublished_atではなく、DB上のpublished_atを判別するようにいたしました。
このように変更することで、「確実に初回投稿前であるタイミング」にのみ通知先ターゲットが表示されるようにいたしました。
There was a problem hiding this comment.
ありがとうございます!attribute_in_databaseは知らなかったので勉強になります!
動作も問題なさそうでした。
|
@SuzukiShuntarou ご連絡いただいた部分について追加で変更を行いましたので、再度確認のほどよろしくお願いします🙏 db:migrateについて以下のコメントにあった 今回の変更においてはカラムの追加があったので、正常な動きです。 |
|
すみません、追記です🙇🏻♀️ こちらのコミットについて。 |
| end | ||
|
|
||
| def before_initial_publish? | ||
| attribute_in_database(:published_at).nil? |
There was a problem hiding this comment.
ありがとうございます!attribute_in_databaseは知らなかったので勉強になります!
動作も問題なさそうでした。
|
@ayu-0505
|
|
@SuzukiShuntarou @komagata |
f211ac6 to
aa07169
Compare
|
@komagata |
…on-target ブログ記事公開時に通知先のターゲットを選択できるようにした










Issue
概要
ブログ記事を公開する際に通知先を選択できるようにターゲットをラジオボタンで選択できるように変更しました。
選択肢は「全員(退会者を除く)」、「現役生のみ」、「就職希望者のみ」、「通知しない」の4つで、「通知しない」を選択した場合はメンター・管理者含めどこにも通知が飛ばないようになっています。
通知は初回公開時のみに行われるため、「公開するボタン」をクリックすると、「通知を行う旨と通知先」をお知らせするダイアログが表示されます。
通知送付後、一度公開した記事の編集画面では通知をすでに行ったというメッセージが表示され、ターゲット選択のラジオボタンは非表示となっています。
変更確認方法
git fetch origin pull/8346/head:feature/set-article-notification-targetgit switch feature/set-article-notification-targetbin/rails db:resetを実行(migrateする&seedデータを入れるため)foreman start -f Procfile.devでサーバーを起動するkomagataでログインする。(pass:testtest)編集画面の確認
この記事を公開すると、全員(退会者を除く)に通知が送られます。もし記事に誤った情報が含まれている場合、その通知を受け取った人を介してSNSなどで拡散される可能性があります。そのため、記事内の年月日などに間違いがないか、しっかり確認してください。公開しても問題ありませんか?)全員(退会者を除く)、現役生のみ、就職希望者のみ)通知しないの場合の警告ダイアログは「通知しない」が選択されています。よろしいですか?となっているか確認する。この記事は初回公開時にxxxxのみに対してすでに通知を行っています。といった通知をすでに行った旨のメッセージが表示され、選択ボタンは表示されなくなっているかを確認する。(通知先は先ほど選んだ通知先となっています。)
この記事は通知を行わずに公開しました。というメッセージとなっている。通知先の確認
全員、現役生、就職希望者、通知なし) 本文部分は適当に入力する。komagataのままトップページに飛び、記事の作成者には通知が飛んでいないことを確認する。testtest)、通知の有無を確認する。(「通知なし」の記事はいずれのユーザーにも飛ばない)DBを元に戻す
このブランチで
bin/rails db:resetを実行した後、mainブランチへ戻り他の作業をする(元のデータベースに戻す)には以下を実行してください。(migrateの履歴等を元に戻すためです)
bin/rails db:rollbackを実行schema.rbが変更されてしまうので、それを戻す(git restore db/schema.rb)git checkout mainでmainブランチへbin/rails db:resetを実行Screenshot
変更前
変更後