はじめに
いいね機能を導入して、複数回「いいね」ができるような仕様にしていました。
しかし、しばらく経ってから「いいね」が1回しかできなくなっていました。(why?)
複数回いいねができるようにしたい!
結論
likeモデルのuniquness_ofのバリデーションを削除すると、複数回できるようになります。
導入した後に自分で設定していたのを忘れていて、焦って色々仮説立てて・・・
当たり前なのに・・・
めちゃくちゃ恥ずかしい・・・しくじってしまいました・・・
そもそもこれはエラーではないという・・
class Like < ApplicationRecord
belongs_to :user
belongs_to :answer
belongs_to :definition
# validates_uniqueness_of :answer_id, scope: :user_id ←削除
# validates_uniqueness_of :definition_id, scope: :user_id ←削除
end
バージョン
rubyのバージョン ruby-2.6.5
Railsのバージョン Rails:6.0.0
恥ずかしながらやったこと
①デベロッパーモード(検証)で挙動確認
②jQueryのスクリプトタグが消えていないかの確認
③CSSが適用されているか(スタイルシートが指定されているか)の確認
④gemの相互作用の確認
⑤コードが破損しているかの確認
⑥コントローラーのcreateアクション挙動確認
⑦likeモデルの確認 ←ここ!
文法説明
validates_uniqueness_of :answer_id, scope: :user_id
validates_uniqueness_ofは唯一性を定めるためのバリデーションです。
scopeは範囲を定めます。
なので今回は、answer_idとuser_idの組み合わせが1通りしかない。
つまり、1回答に1回しか「いいね」が押せませんということです。
この記述があるかぎり一意性が担保されるということです。
補足
今回は2時間くらいで問題に気づけましたが、デバックするときの基本は開発の全体像みることが改めて重要だなと感じました。
やったこと忘れてて恥ずかしいですが、灯台元ぐらしでありました。以後気をつけたいと思います笑