概要
1つのQ&Aに対してベストアンサーは0または1つの想定だが、現状ではモデルにもDBにもユニーク制約がないため2つ以上のベストアンサーが登録され得る。
再現手順
通常のユーザーの操作ではごく稀にしか発生しないバグと推定される。
(Q&A作成者が複数の端末でQ&Aにアクセスしている状態で、異なる回答の「ベストアンサーにする」ボタンを同時にクリックするなど)
以下、開発環境で再現させる。
foreman start -f Procfile.devでローカルサーバーを起動
- hajime(任意のユーザーで可)でログイン
- 解決済みの質問 にアクセス(既にベストアンサーが1つ選択されて解決済みの状態)
bin/rails cでRailsコンソールを起動して以下を実行
kimura = User.find_by(login_name: 'kimura')
question = Question.find(782854533)
question.create_correct_answer!(description: '2番目の正解回答です。', user_id: kimura.id) CorrectAnswer.create!(question: question, user: kimura, description: '2番目の正解回答です。')
- 解決済みの質問 に再度アクセスすると、ベストアンサーが2つ選択されている
*条件は不明だが、1つ目のベストアンサーの回答が非表示になり後から登録したベストアンサーのみ表示されるケースもある
期待される振る舞い
1つのQ&Aに対してベストアンサーはDB上でもUI上でも0または1つの状態になっている。
解決済みのQ&Aに対しては(一度ベストアンサーを取り消さない限りは)新たなベストアンサーを登録できない。
スクリーンショット

環境
関連PR
Ref: #9024
概要
1つのQ&Aに対してベストアンサーは0または1つの想定だが、現状ではモデルにもDBにもユニーク制約がないため2つ以上のベストアンサーが登録され得る。
再現手順
通常のユーザーの操作ではごく稀にしか発生しないバグと推定される。
(Q&A作成者が複数の端末でQ&Aにアクセスしている状態で、異なる回答の「ベストアンサーにする」ボタンを同時にクリックするなど)
以下、開発環境で再現させる。
foreman start -f Procfile.devでローカルサーバーを起動bin/rails cでRailsコンソールを起動して以下を実行kimura = User.find_by(login_name: 'kimura')question = Question.find(782854533)question.create_correct_answer!(description: '2番目の正解回答です。', user_id: kimura.id)CorrectAnswer.create!(question: question, user: kimura, description: '2番目の正解回答です。')*条件は不明だが、1つ目のベストアンサーの回答が非表示になり後から登録したベストアンサーのみ表示されるケースもある
期待される振る舞い
1つのQ&Aに対してベストアンサーはDB上でもUI上でも0または1つの状態になっている。
解決済みのQ&Aに対しては(一度ベストアンサーを取り消さない限りは)新たなベストアンサーを登録できない。
スクリーンショット
環境
関連PR
Ref: #9024