これまでに作った機能について簡単にまとめていく。
今回は、
いいね機能の作成
前提条件
何かのモデルの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 %>
リンクをハート型にしたい場合は、こちら
以上で作成完了
