Browse Source

Use a before_action to find notification in controller

pull/2630/head
Rachael Booth 2 years ago
parent
commit
1b747992fb
  1. 44
      app/controllers/notifications_controller.rb

44
app/controllers/notifications_controller.rb

@ -1,16 +1,21 @@
class NotificationsController < ApplicationController
before_action :authenticate_user!, except: %i[show]
before_action :authenticate_scope!, except: %i[show dismiss]
before_action :find_notification, except: %i[new create]
rescue_from ActiveRecord::RecordNotFound, with: :render_not_found
def dismiss
@notification = Notification.find_by(id: params[:notification_id])
@notification.mark_as_read! for: current_user
redirect_back(fallback_location: root_path)
end
def show
@notification = current_user&.support? ? Notification.find_by(id: params[:id]) : Notification.active.find_by(id: params[:id])
if @notification&.show_additional_page && (@notification&.show_on_unauthenticated_pages || current_user)
if !@notification.show_on_unauthenticated_pages && !current_user
render_not_found and return
end
if @notification.show_additional_page
render "show"
else
redirect_back(fallback_location: root_path)
@ -31,21 +36,7 @@ class NotificationsController < ApplicationController
end
end
def check_answers
@notification = Notification.find_by(id: params[:notification_id])
render_not_found and return unless @notification
render "notifications/check_answers"
end
def edit
@notification = Notification.find_by(id: params[:id])
end
def update
@notification = Notification.find_by(id: params[:id])
render_not_found and return unless @notification
start_now = params[:notification][:start_now]
if @notification.errors.empty? && @notification.update(notification_model_params)
@ -62,17 +53,7 @@ class NotificationsController < ApplicationController
end
end
def delete_confirmation
@notification = Notification.find_by(id: params[:notification_id])
render_not_found and return unless @notification
render "notifications/delete_confirmation"
end
def delete
@notification = Notification.find_by(id: params[:notification_id])
render_not_found and return unless @notification
@notification.update!(end_date: Time.zone.now)
flash[:notice] = "The notification has been deleted"
redirect_to root_path
@ -100,4 +81,13 @@ private
model_params
end
def find_notification
id = params[:id] || params[:notification_id]
@notification = current_user&.support? ? Notification.find_by(id:) : Notification.active.find_by(id:)
raise ActiveRecord::RecordNotFound unless @notification
@notification
end
end

Loading…
Cancel
Save