railsのいいね機能をjavascriptを使った非同期処理にしたい
サイト( http://qiita.com/YuitoSato/items/94913d6a349a530b2ea2 )を参考に実装しているのですが、2点わからないことがあります。回答よろしくお願い致します。
- サイトではcreate.js.erb、destroy.js.erbとありますが、erbを使わずjsで書く場合、どのようになるのか教えていただきたいです。
- また、create.js.erb、destroy.js.erbを一つにまとめて書いた場合どのようになるのでしょうか。
現状ですが、この2点がわからず下記のように非同期処理ではない状態で実装しており、
非同期をのぞいて正常に動いています。
※いいねのアイコンは、Font-Awesomeのfa-thumbs-o-upを使用しています。
↓show.html.erb
<% if answer.like?(current_user) %>
<%= link_to like_path(@likes, answer_id: answer.id), method: :delete do %>
<i class="fa fa-thumbs-o-up"></i></a>
<span>
<%= answer.like_count %>
</span>
<% end %>
<% else %>
<%= link_to likes_path(answer_id: answer.id), method: :post do %>
<i class="fa fa-thumbs-o-up"></i></a>
<span>
<%= answer.like_count %>
</span>
<% end %>
<% end %>
↓answer.rb
def like_count
likes=Like.where(answer_id:self)
likes.count
end
def like?(current_user)
Like.where(user_id:current_user.id,answer_id:id)
end
↓questions_controller.rb
def show
@answers = Answer.enable_answer.where(question_id: @question.id)
@category = Category.find_by(id: @question.category_id)
@favorite = Favorite.find_by(user_id: current_user.id, question_id: @question.id)
@likes = Like.where(answer_id: params[:answer_id])
end
↓likes_controller.rb
class LikesController < AuthorizedController
before_action :set_answer
after_action :set_likes
def create
like = Like.new(user_id: current_user.id, answer_id: params[:answer_id])
like.save
redirect_to question_path(@answer.question_id)
end
def destroy
like = Like.find_by(user_id: current_user.id, answer_id: params[:answer_id])
like.destroy
redirect_to question_path(@answer.question_id)
end
private
def set_answer
@answer = Answer.find(params[:answer_id])
end
def set_likes
@likes = Like.where(answer_id:params[:answer])
end
↓answer_controller.rb
def show
@answer = Answer.find(params[:id])
@likes = Like.where(prototype_id: params[:id])
end