Acabo de encontrar el mismo problema porque necesito que los usuarios se marquen para su eliminación y no se eliminen de inmediato.
Después de hackear un poco, finalmente encontré la manera de anular la acción de eliminación predeterminada de RailsAdmin.
Aquí está la acción de eliminar después de que agregué mi propio código personalizado (no eliminar pero marcar para eliminar con un aviso personalizado, ocultando el botón eliminar si el usuario ya está marcado para eliminación). :
# config/initializers/rails_admin_delete_override.rb
module RailsAdmin
module Config
module Actions
class Delete < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
register_instance_option :member do
true
end
register_instance_option :route_fragment do
'delete'
end
register_instance_option :http_methods do
[:get, :delete]
end
register_instance_option :authorization_key do
:destroy
end
register_instance_option :visible? do
bindings[:object].class.base_class.name != 'User' || !bindings[:object].to_destroy?
end
register_instance_option :controller do
Proc.new do
if request.get? # DELETE
respond_to do |format|
format.html { render @action.template_name }
format.js { render @action.template_name, :layout => false }
end
elsif request.delete? # DESTROY
redirect_path = nil
@auditing_adapter && @auditing_adapter.delete_object(@object, @abstract_model, _current_user)
if @object.class.base_class.name == 'User'
@object.to_destroy!
flash[:success] = t("admin.flash.user_destroy_successful", :name => @model_config.label)
redirect_path = index_path
else
if @object.destroy
flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.delete.done"))
redirect_path = index_path
else
flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.delete.done"))
redirect_path = back_or_index
end
end
redirect_to redirect_path
end
end
end
register_instance_option :link_icon do
'icon-remove'
end
end
end
end
end
Puede encontrar el código de acción original aquí: https://github.com/sferik/rails_admin/blob/master/lib/rails_admin/config/actions/delete.rb
tengo que hacer algo similar y tenía la esperanza de encontrar una solución más simple (ala Typus donde se puede extender controladores individuales y anular las acciones individuales (o añadir su propio)), pero esto va a hacer. ¡Gracias por compartir su solución! –