본문 바로가기

Archived(Programming)/Ruby on Rails(기초)

RubyOnRails 5) Like 좋아요 기능

RubyOnRails 5) Like 좋아요 기능


참고 :  http://sookmyunglion.tistory.com/7#comment14590767


먼저 Like Model을 만들어준다.


1
$ rails g model like post:references user:references
$ rails db:migrate
cs



그리고 Post와 User에 Like와의 관계를 연결해준다.

추가로 User에는 해당 유저가 좋아요를 눌렀는지 체크를 하는 메소드 is_like?를 추가해준다.


1
2
3
4
5
6
7
8
9
\app\models\post.rb
has_many :likes
 
\app\models\user.rb
has_many :likes
 
def is_like?(post)
  Like.find_by(user_id: self.id, post_id: post.id).present?
end
cs


다음, Likes controller를 만들어주고 Route로 like를 지정해주기.


1
2
3
$ rails g controller likes
\config\routes.rb
 
post 'posts/:id/like' => 'likes#like_toggle'
cs


다음 like_toggle을 채워주고, view 파일을 정리.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
\app\controllers\likes_controller.rb
 
def like_toggle
  like = Like.find_by(user_id: current_user.id, post_id: params[:id])
    
  if like.nil?
    Like.create(user_id: current_user.id, post_id: params[:id])   
  else
    like.destroy
 
  end
    
  redirect_to :back
end
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
\app\views\posts\show.html.erb
 
<p>
    <strong>Like:</strong>
    <%= @post.likes.size %> 명이 좋아합니다. 
</p>
 
<if current_user.is_like? (@post) %>
    <form action='/posts/<%= @post.id%>/like' method='post'>
    <button> 좋아요 취소 </button>  
    </form>
 
<else %>
    <form action='/posts/<%= @post.id%>/like' method='post'>
    <button> 좋아요</button>  
    </form>
 
<end %>
cs

좋아요 개수를 확인하는 법은 post.like.size 를 통해 확인