LoginSignup
3
1

More than 3 years have passed since last update.

【Rails6】「いいね」が1回しかできないエラーを解消

Last updated at Posted at 2021-02-25

はじめに

いいね機能を導入して、複数回「いいね」ができるような仕様にしていました。
しかし、しばらく経ってから「いいね」が1回しかできなくなっていました。(why?)

いいね1回.gif

複数回いいねができるようにしたい!

結論

likeモデルのuniquness_ofのバリデーションを削除すると、複数回できるようになります。

導入した後に自分で設定していたのを忘れていて、焦って色々仮説立てて・・・
当たり前なのに・・・
めちゃくちゃ恥ずかしい・・・しくじってしまいました・・・

そもそもこれはエラーではないという・・

app/models/like.rb
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

いいね複数.gif

バージョン

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時間くらいで問題に気づけましたが、デバックするときの基本は開発の全体像みることが改めて重要だなと感じました。
やったこと忘れてて恥ずかしいですが、灯台元ぐらしでありました。以後気をつけたいと思います笑

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1