class CmAdmin::ResourceController
def custom_controller_action(action_name, params)
def custom_controller_action(action_name, params) @current_action = CmAdmin::Models::Action.find_by(@model, name: action_name.to_s) return unless @current_action scoped_model = "CmAdmin::#{@model.name}Policy#{action_name.classify}Scope".constantize.new(Current.user, @model.ar_model.name.classify.constantize).resolve @ar_object = fetch_ar_object(scoped_model, params[:id]) return @ar_object unless @current_action.child_records child_records = @ar_object.send(@current_action.child_records) child_records = child_records.includes(@current_action.eager_load_associations) if @current_action.eager_load_associations.present? child_records = apply_scopes(child_records) @reflection = @model.ar_model.reflect_on_association(@current_action.child_records) @associated_model = if @reflection.klass.column_names.include?('type') CmAdmin::Model.find_by(name: @reflection.plural_name.classify) else CmAdmin::Model.find_by(name: @reflection.klass.name) end @associated_ar_object = if child_records.is_a? ActiveRecord::Relation filter_by(params, child_records, parent_record: @ar_object, filter_params: @associated_model.filter_params(params)) else child_records end [@ar_object, @associated_model, @associated_ar_object] end