Here is the solution I found.
My mistake was the namespace of my custom controller: although RA engine is mounted on /backend, its namespace is still RailsAdmin.
This means that to have a custom controller in my backend, I have to create the controller under namespace RailsAdmin, thus
module RailsAdmin
class ImagesController < RailsAdmin::MainController
# unless your controller follows MainController routes logic, which is
# unlikely, these filters will not work
skip_before_filter :get_model
skip_before_filter :get_object
skip_before_filter :check_for_cancel
....
end
end
The controller is defined under controllers/rails_admin/images_controller.rb and views are in views/rails_admin/images/
Routing
Having a custom RA controller, implies drawing new routes for the engine itself, thus my routes.rb becomes like this:
RailsAdmin::Engine.routes.draw do
# here you can define routes for the engine in the same way you do for your app
# your backend must be under HTTPS
scope protocol: 'https://', constraints: {protocol: 'https://'} do
resources :images
end
end
MyApp::Application.routes.draw do
# your application's routes
.....
end
To access the new engine routes (e.g. images INDEX):
rails_admin.images_path
An important RA wiki page for routes is this one