これまでに作った機能について簡単にまとめていく。
今回は、
いいね機能の作成
前提条件
何かのモデルの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 |
中間テーブルの作成
1 |
$ rails g model Like user:references blog:references |
アソシエーションの設定
app/models/user.rb
1 |
has_many :likes, dependent: :destroy |
app/models/like.rb
1 2 |
belongs_to :user belongs_to :blog |
app/models/blog.rb
1 |
has_many :likes, dependent: :destroy |
ルーティングの追加
1 |
resources :likes, only: [:create, :destroy] |
コントローラーの設定
app/controllers/likes_controller.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
1 2 3 4 5 6 7 8 |
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
1 2 3 4 5 6 7 |
<% 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 %> |
リンクをハート型にしたい場合は、こちら
以上で作成完了