How
to clone project from git hub repository
2. bundle
install
3. rake
db:create
    How
to create a Like/Dislike in Blog App
1. create a div in post
show form(posts/show.html.erb) and add..
   <div id="post_likes">
      <%= render
"likes/likes", likeable: @post %>
  </div>
2. create a view page of
likes in likes folder(likes/_likes.html.erb) and add.
  <% if
likeable.already_liked?(current_user) %>
   <%= link_to 'Unlike',
like_path(likeable.likes.where(user_id:      current_user.id).first),
method: :delete, remote: true %>
  <% else %>
   <%= link_to 'Like',
likes_path(likeable_type:         likeable.class.name, likeable_id:
likeable.id), method: :post,     remote: true %>
  <% end %>
  <small><%=
likeable.likes.count %> likes</small>
3. Next, create a js file
in likes folder(likes/create.js.erb) and add..
  <% if
@like.likeable.class.name == "Post" %>
   $("#post_likes").html("<%=
escape_javascript render       'likes/likes', likeable:
@like.likeable %>");
  <% elsif
@like.likeable.class.name == "Comment" %>
   $("#comment_<%=
@like.likeable.id %>_likes").html("<%=
     escape_javascript render 'likes/likes', likeable:
       @like.likeable %>");
  <% else %>
   $("#reply_<%=
@like.likeable.id %>_likes").html("<%=
      escape_javascript render 'likes/likes', likeable:
      @like.likeable %>");
  <% end %>
4. Next, create a js file
in likes folder(likes/destroy.js.erb) and add..
  <% if
@like.likeable.class.name == "Post" %>
   $("#post_likes").html("<%=
escape_javascript render       'likes/likes', likeable:
@like.likeable %>");
  <% elsif
@like.likeable.class.name == "Comment" %>
   $("#comment_<%=
@like.likeable.id %>_likes").html("<%=
     escape_javascript render 'likes/likes', likeable:
      @like.likeable %>");
  <% else %>
   $("#reply_<%=
@like.likeable.id %>_likes").html("<%=
      escape_javascript render 'likes/likes', likeable:
      @like.likeable %>");
  <% end %>
5. Next, create a
controller likes_controller.rb
class LikesController <
ApplicationController
 # before_action :find_post
 before_action :find_like,
only:[:destroy]
 def create
  if
current_user.likes.where(likeable_id: params[:likeable_id],
likeable_type: params[:likeable_type]).exists?
   flash[:notice]= "you
can't like more than once"
  else
   @like =
current_user.likes.create(likeable_id: params[:likeable_id],
likeable_type: params[:likeable_type])
  end
 end
 def destroy
  @like.destroy
 end
 def find_like
  @like =
Like.find(params[:id])
 end
 # private
 # def find_post
 #  @post =
Post.find(params[:post_id])
 # end
end
6. Next, relationship
establish in comment.rb model and add ..
   has_many   :likes, as:
:likeable, dependent: :destroy 
  def already_liked?(user)
   likes.where(user_id:
user.id).exists?
  End
7. Next, like.rb model and
add..
  class Like <
ApplicationRecord
     belongs_to :likeable,
polymorphic: true
     belongs_to :user
  end
8. Next, post.rb model and
add..
  
  class Post <
ApplicationRecord
   has_many   :comments,
dependent: :destroy
   has_many   :likes, as:
:likeable, dependent: :destroy
   belongs_to  :user
   validates   :title,
presence: true, length: {minimum: 5}
   def already_liked?(user)
    likes.where(user_id:
user.id).exists?
   end
  end
 How
to create a reply on comment
 
1. render a reply form in
comment in comments folder  (comments/comment.html.erb)
  <div id="replyForm">
   <%= render
'replies/form', comment: comment %>
  </div>
2. render a showReply page
in comments folder (comments/comment.html.erb)
  <div
id="replyContainer">
   <%= render
'comments/showreply', comment: comment %>
  </div>
3.  View of replies form
(replies/_form.html.erb)
 <%=
form_with(model:[comment.post, comment,
       comment.replies.build], remote:true) do |f|%>
 <%= f.hidden_field
:user_id, value: current_user.id %>
 <div class="form-group
row d-flex justify-content-center">
  <div
class="col-md-10">
   <%= f.text_field
:body, class: "form-control", placeholder:      "Reply"
%>
  </div>
  <div class="col-md-2">
   <%= f.submit "Send",
class: "btn btn-primary" %>
  </div>
 </div>
<% end %>
4. View of showReply Page
(comments/_showReply.html.erb)
  
  <%
comment.replies.each do |r| %>
    <h5
class="card-title"><%= r.body %></h5>
   <p
class="card-text"><%= r.user.name %></p>
   <p
class="card-text"><small>
    <%=
time_ago_in_words(r.created_at) %></small></p>
   <span
id="reply_<%= r.id %>_likes">
     <%= render
"likes/likes", likeable: r %>
   </span>
  <% if
current_user == r.user %>
    <span> |
<%= link_to 'Delete',[r.comment.post, r.comment, r],      method:
:delete, data: {confirm: 'Are you sure?'}      %></span>
  <% end %>
  <hr>
  <% end %>
5. create a js file in
replies folder (replies.create.js.erb) and add..
  
$("#replyConatainer").html("<%= escape_javascript
render       'comments/showreply',  comment: @comment. %>");
  $("#replyForm").html("<%=
escape_javascript render 'replies/form',      comment: @comment %>");
6. Modify comment.html.erb
in comments folder and add..
  <% if current_user ==
comment.user || current_user ==       comment.post.user %>
   <span> | <%=
link_to 'Delete',[comment.post, comment],       method: :delete,
data: {confirm: 'Are you sure?'} %>
   </span>
  <% end %>
7. Modify
showReply.html.erb in comments folder and add..
 
  <% if current_user ==
r.user || current_user == r.comment.user %>
   <span> | <%=
link_to 'Delete',[r.comment.post, r.comment, r],     method: :delete,
data: {confirm: 'Are you sure?'} %></span>
  <% end %>