Estoy intentando construir una aplicación RESTful para administrar realmente muchos tipos de objetos configurables, por lo que hay una gran cantidad de tipos de "recursos" y, por lo tanto, una gran cantidad de controladores. Todavía estoy en la fase POC, por lo que sería bueno si puedo mostrar todos los controladores en una primera página de navegación, por lo que cualquier forma fácil (programable) para hacer eso?Cómo enumerar programáticamente todos los controladores en Rails
Respuesta
Google:
primer resultado 'carriles controladores de la lista'.
http://snippets.dzone.com/posts/show/4792
Después de aprender acerca de las subclases, creo que el código de mi enlace podría hacerse simplemente como ..
ApplicationController.subclasses.each do |c|
puts "Controller: #{c}"
puts "Actions: #{c.constantize.action_methods.collect{|a| a.to_s}.join(', ')}"
end
ApplicationController.subclasses
que va a empezar, pero tenga en cuenta que en el modo de desarrollo no verá mucho, ya que solo le mostrará lo que realmente se ha cargado. Enciéndalo en modo de producción, y debería ver una lista de todos sus controladores.
Puede solicitar todos los archivos en "# {RAILS_ROOT}/app/controllers" para completar su lista en modo de desarrollo. – EmFi
Es importante tener en cuenta que esto funciona en modo de producción, pero no en modo de desarrollo, ya que los controladores se cargan de forma perezosa. Encienda su aplicación en el modo de consola de rieles y mire las subclases/descendientes y no verá ninguna. Escriba el nombre de uno de los controladores, y luego la clase nombrada aparecerá como una subclase. ActiveAdmin parece hacer un buen trabajo en esto ... es posible que desee verificar su código en GitHub. – Raels
Esta no es una solución completa porque no obtiene todos los controladores, solo subclases directas de AplicationController. Si tiene dos niveles de anidación en su jerarquía, no los obtendrá. Use ApplicationController.descendientes en su lugar. Y para obtener todos los controladores en el momento de la carga, puede usar Rails.application.eager_load! en los inicializadores del entorno de desarrollo o prueba, pero tenga en cuenta que cargará todas las aplicaciones de raíles y puede ralentizar el inicio y tener efectos secundarios. –
En Rails 3.1 +:
Rails.application.routes
Esto le dará todos los controladores, las acciones y sus rutas si tiene sus caminos en su archivo routes.rb.
Por ejemplo:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path, controller: route.defaults[:controller], action: route.defaults[:action]}
end
Actualización: para los carriles 3.2, motor de ruta Diario cambiado, por lo que el código se convierte en:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path.spec.to_s, controller: route.defaults[:controller], action: route.defaults[:action]}
end
Actualización: Todavía trabajando para los rieles 4.2.7. Para extraer la lista de controladores (por pregunta real), sólo tiene que extraer el controlador y uniq
controllers = Rails.application.routes.routes.map do |route|
route.defaults[:controller]
end.uniq
Aquí están mis fuentes: https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/routes.rake https://github.com/rails/rails/blob/ master/railties/lib/rails/application/route_inspector.rb También me di cuenta de que los rieles crean una ruta incorporada para la información del servidor del modo de desarrollo, pero encontrar esa ruta se deja como un ejercicio para el lector. – nurettin
Mientras @ método de JDL trabajará en una serie de situaciones se produce un error si tiene subclases controlador (por ejemplo ContactPageController
hereda de PageController
que hereda de ApplicationController
).
Por lo tanto un mejor método es utilizar:
::ApplicationController.descendants
Usando routes
puede no funcionar si usted tiene una aplicación compleja en la que las partes se abstraen como los motores, éstos estarán ocultas.
subclases no funcionó para el administrador activo pero su trabajo! gracias – Fedcomp
Me gustó especialmente @jdl solución
ApplicationController.subclasses
Pero en mi caso, en el que realmente necesitaba todos los nombres de los controladores en formato de guión bajo (no tengo subdirectorios por ejemplo: /admin
) que utilizó la siguiente:
Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| path.match(/(\w+)_controller.rb/); $1 }.compact
Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| (path.match(/(\w+)_controller.rb/); $1).camelize+"Controller" }
Esto nos da el nombre exacto del controlador tal como aparece en el archivo de controlador.
Otra solución (si estás en 5 carriles) y en el desarrollo y la necesidad de asignar controladores y acciones:
Rails.application.routes.set.anchored_routes.map(&:defaults)
puede rechazar [: en la residencia] si es necesario:
.reject { |route| route[:internal] }
- 1. Ruby on Rails: método Global Helper para todos los controladores
- 2. dwscript: ¿cómo enumerar todos los tipos disponibles?
- 3. Encontrar todos los controladores en la aplicación
- 4. Enumerar todos los elementos de Llavero en mi aplicación iOS
- 5. Enumerar programáticamente Segmentos salientes para un UIViewController
- 6. ¿Cómo enumerar todos los enlaces registrados en Ninject?
- 7. ¿Cómo enumerar todos los marcadores en NERDTree of VIM?
- 8. ¿Cómo enumerar todos los archivos modificados en un volumen oculto?
- 9. ¿Cómo puedo enumerar todos los ensamblados registrados en GAC?
- 10. ¿Cómo enumerar todos los métodos para un objeto en Ruby?
- 11. algoritmo para enumerar todos los posibles caminos
- 12. Usando Zend_Auth para asegurar todos los controladores
- 13. Cómo eliminar todos los controladores de eventos Click en Jquery
- 14. ¿Cómo encontrar todos los controladores en Spring MVC?
- 15. Enumerar * todos * caminos hamiltonianos
- 16. ¿Cómo puedo enumerar todos los controladores de impresora disponibles como el Asistente para agregar impresoras en C#?
- 17. Contactos ¿Resuelve cómo enumerar todos los campos disponibles?
- 18. Cómo recursivamente enumerar todos los archivos y directorios
- 19. Enumerar todos los dispositivos, particiones y volúmenes en Powershell
- 20. ¿Los controladores de rieles son multiproceso? Thread.exclusive en los controladores
- 21. ¿Cómo eliminar todos los controladores de eventos Click?
- 22. ¿Cómo enumero programáticamente todos los proyectos en una solución?
- 23. Enumerar todos los usuarios en LDAP con PHP
- 24. ¿Cómo enumerar los módulos importados?
- 25. cómo codificar los controladores?
- 26. Controladores de plantilla Rails 3.1
- 27. ¿Cómo enumerar todos los eventos registrados de un nodo DOM usando Javascript?
- 28. AdMob en todos mis controladores de vista?
- 29. Cómo establecer automáticamente todos los enlaces a nofollow en Rails
- 30. ¿Debo anular la suscripción a todos los controladores de eventos?
Si vas a enumerar controladores y acciones, ¿por qué no utilizar rutas de rake? Seguro que la salida es desordenada, pero eso se soluciona ampliando la ventana de tu terminal. – EmFi
Acabo de escribir un código rápido que sería similar a lo que estaba haciendo el enlace. Practicando un poco, así lo recuerdo. – Jim