class SDGManagement::RelationsController < SDGManagement::BaseController before_action :check_feature_flags before_action :load_record, only: [:edit, :update] FILTERS = %w[pending_sdg_review all sdg_reviewed].freeze has_filters FILTERS, only: :index def index @records = relatable_class .send(@current_filter) .accessible_by(current_ability) .by_goal(params[:goal_code]) .by_target(params[:target_code]) .order(:id) .page(params[:page]) @records = @records.search(params[:search]) if params[:search].present? end def edit end def update @record.sdg_related_list = params[@record.class.table_name.singularize][:sdg_related_list] redirect_to({ action: :index }, notice: update_notice) end private def load_record @record = relatable_class.find(params[:id]) end def relatable_class params[:relatable_type].classify.constantize end def check_feature_flags process_name = params[:relatable_type].split("/").first process_name = process_name.pluralize unless process_name == "legislation" check_feature_flag(process_name) raise FeatureDisabled, process_name unless Setting["sdg.process.#{process_name}"] end def update_notice if @record.sdg_review.present? t("sdg_management.relations.update.notice", relatable: relatable_class.model_name.human) else @record.create_sdg_review! t("sdg_management.relations.update_and_review.notice", relatable: relatable_class.model_name.human) end end end