これまでに作った機能について簡単にまとめていく。

今回は、

いいね機能の作成

前提条件

何かのモデルのcrud機能があること
ログイン機能があること
ログイン機能についてはこちら

使用モデル

Userモデル

カラム データ型
1 name string
2 email text
3 password_digest string

Blogモデル

カラム データ型
1 title string
2 content text

Likeモデル(中間テーブル)

カラム データ型
1 user_id bigint
2 blog_id bigint

中間テーブルの作成

$ rails g model Like user:references blog:references

アソシエーションの設定

app/models/user.rb

has_many :likes, dependent: :destroy

app/models/like.rb

belongs_to :user
belongs_to :blog

app/models/blog.rb

has_many :likes, dependent: :destroy

ルーティングの追加

resources :likes, only: [:create, :destroy]

コントローラーの設定

app/controllers/likes_controller.rb

class LikesController < ApplicationController

  def create
    like = current_user.likes.create(blog_id: params[:blog_id])
    redirect_to blogs_url
  end

  def destroy
    like = current_user.likes.find_by(id: params[:id]).destroy
    redirect_to blogs_url
  end

end

いいねの有無を確認する処理を追加

app/controllers/blogs_controller.rb

class BlogsController < ApplicationController
  
  def show
    @blog = Blog.find(params[:id])
    @like = current_user.likes.find_by(blog_id: @blog.id)
  end
  
end

ビューに処理を追加

app/views/blogs/show.html.erb

<% unless @blog.user_id == current_user.id %>
  <% if @like.present? %>
    <%= link_to 'いいねを取り消す', like_path(id: @like.id), method: :delete %>
  <% else %>
    <%= link_to 'いいね', likes_path(blog_id: @blog.id), method: :post %>
  <% end %>
<% end %>

リンクをハート型にしたい場合は、こちら

以上で作成完了