Files
growstuff/app/controllers/likes_controller.rb
Daniel O'Connor 88ba4f9198 Rubocop
2016-12-09 12:19:38 +10:30

72 lines
1.8 KiB
Ruby

class LikesController < ApplicationController
before_action :authenticate_member!, except: :index
respond_to :html, :json
def create
@like = Like.new
@like.member = current_member
@like.likeable = find_likeable
respond_to do |format|
if @like.save
format.html { redirect_to @like.likeable }
format.json do
render(
json: {
id: @like.likeable.id,
liked_by_member: true,
description: ActionController::Base.helpers.pluralize(@like.likeable.likes.count, "like"),
url: like_path(@like, format: :json)
},
status: 201
)
end
else
format.html do
flash[:error] = 'Unable to like'
redirect_to @like.likeable
end
end
end
end
def destroy
like = Like.find(params[:id])
likeable = like.likeable
respond_to do |format|
if like.destroy
format.html { redirect_to likeable }
format.json do
render(
json: {
id: likeable.id,
liked_by_member: false,
description: ActionController::Base.helpers.pluralize(likeable.likes.count, "like"),
url: likes_path(Like.new, "#{likeable.class.name.underscore}_id", likeable.id, format: :json)
},
status: 200
)
end
else
format.html do
flash[:error] = 'Unable to unlike'
redirect_to likeable
end
end
end
end
private
def find_likeable
params.each do |name, value|
return Regexp.last_match[1].classify.constantize.find(value) if name =~ /(.+)_id$/
end
end
def like_params
params.require(:like).permit(:member, :likeable)
end
end