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