With Rails 7.1, you can list unused routes with:
./bin/rails routes --unused
For Rails 6.0, 6.1 and 7.0, below is a script I used in my project to find out unused routes. Apparently, I barrow it from ShakaCode. Thanks to them.
In conjunction with the self contained rails script shown before, here's the full modified script:
#!/usr/bin/env ruby
APP_PATH = File.expand_path("../../config/application", __FILE__)
require File.expand_path("../../config/boot", __FILE__)
require APP_PATH
Rails.application.require_environment!
unused_routes = {}
Rails.application.routes.routes.each do |r|
name = r.requirements[:controller].to_s.camelize
action = r.requirements[:action].to_s
controller = "#{name}Controller"
if Object.const_defined?(controller) && !controller.constantize.new.respond_to?(action)
unless Dir.glob(Rails.root.join("app", "views", name.downcase, "#{action}.*")).any?
unused_routes[controller] = [] if unused_routes[controller].nil?
unused_routes[controller] << action
end
end
end
pp unused_routes
The script is in the file bin/unused_routes
. And it's an executable (chmod +x bin/unused_routes
).
With that, you only need to run the command below. No more need to remember or search for it, everything lives in your repository.
./bin/unused_routes