Railsでいいね機能を実装したときのメモ。
いいね機能
例えば、投稿だけじゃなくて、画像とかコメントとかいいね先がたくさんあるので、名前は〇〇_likes
とする
$ rails g model 〇〇_likes user:references 〇〇:references
複合キーインデックス作ることで、DB的にも組み合わせ保証する
class Create〇〇Likes < ActiveRecord::Migration[5.1]
def change
create_table :〇〇_likes do |t|
t.integer :user_id, null: false
t.integer :〇〇_id, null: false
t.timestamps
t.index :user_id
t.index :〇〇_id
t.index [:user_id, :〇〇_id], unique: true
end
end
end
カウンターキャッシュについて
Rails には、カウンターキャッシュ(counter_cache
)という機能が備わっている
counter_cluture
という高機能版の gem もあるので検討してみた
キャッシュを使わないとDBへの問い合わせが毎回増えてしまう
下記記事を参考に、 counter_cache
より counter_cluture
の方が良さそうと判断
- https://qiita.com/tachiba/items/797ea74e7eeb7f32f886
- https://qiita.com/kanekomasanori@github/items/8155dff193e961828d02
後述の counter_cluture
を導入するために、キャッシュ用のカラムを親テーブル〇〇に追加
$ rails g counter_culture 〇〇 likes_count
likes_count
のカラムが追加される