Ruby on Rails

【Ruby on Rails】いいね機能やカウンターキャッシュらへんのメモ

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 の方が良さそうと判断

後述の counter_cluture を導入するために、キャッシュ用のカラムを親テーブル〇〇に追加

$ rails g counter_culture 〇〇 likes_count

likes_count のカラムが追加される

-Ruby on Rails