class FollowsController < ApplicationController after_action :verify_authorized def show skip_authorization unless current_user render plain: "not-logged-in" return end if current_user.id == params[:id].to_i && params[:followable_type] == "User" render plain: "self" return end render plain: FollowChecker.new(current_user, params[:followable_type], params[:id]).cached_follow_check end def create authorize Follow followable = if params[:followable_type] == "Organization" Organization.find(params[:followable_id]) elsif params[:followable_type] == "Tag" Tag.find(params[:followable_id]) else User.find(params[:followable_id]) end add_param_context(:followable_type, :followable_id, :verb) @result = if params[:verb] == "unfollow" follow = current_user.stop_following(followable) Notification.send_new_follower_notification_without_delay(follow, true) "unfollowed" else follow = current_user.follow(followable) Notification.send_new_follower_notification(follow) "followed" end current_user.touch render json: { outcome: @result } end def update @follow = Follow.find(params[:id]) authorize @follow if @follow.update(follow_params) redirect_to "/dashboard/following" end end private def follow_params params.require(:follow).permit(policy(Follow).permitted_attributes) end end