これまでに作った機能について簡単にまとめていく。
今回は、
いいね機能の作成
前提条件
何かのモデルのcrud機能があること
ログイン機能があること
ログイン機能についてはこちら
使用モデル
Userモデル
| カラム | データ型 | |
|---|---|---|
| 1 | name | string | 
| 2 | 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 %>
リンクをハート型にしたい場合は、こちら
以上で作成完了
