'daki tüm denetleyicileri program aracılığıyla listeleme Birçok yapılandırılabilir nesneyi gerçekten yönetmek için RESTful bir uygulama oluşturmaya çalışıyorum, bu nedenle çok fazla "kaynak" türü ve dolayısıyla çok sayıda denetleyici var. Hala POC evresindeyim, bu yüzden ilk gezinti sayfasındaki tüm denetleyicileri gösterebilirsem hoş olur, böylece bunu yapmak için herhangi bir kolay yol (programlanabilir)?Rails
Rails
cevap
Google: 'raylar liste kontrolörleri
İlk sonuç.
http://snippets.dzone.com/posts/show/4792
alt sınıfları öğrendikten sonra, ben
ApplicationController.subclasses.each do |c|
puts "Controller: #{c}"
puts "Actions: #{c.constantize.action_methods.collect{|a| a.to_s}.join(', ')}"
end
ApplicationController.subclasses
Bu başlangıç alırsınız .. benim bağlantıdan kod olarak basitçe yapılabilir düşünüyorum, ama Geliştirme modunda çok fazla görmeyeceğinizi unutmayın, çünkü size yalnızca neyin yüklü olduğunu gösterecektir. Üretim modunda ateşleyin ve tüm denetleyicilerinizin bir listesini görmelisiniz. 3.1+ Rails
Listenizi geliştirme modunda doldurmak için "# {RAILS_ROOT}/uygulama/denetleyiciler" içindeki tüm dosyaların girilmesini isteyebilirsiniz. – EmFi
Bu, üretim modunda çalışır, ancak geliştirme modunda değil, çünkü kontrolörler tembel olarak yüklendiğine dikkat etmek önemlidir. Uygulamanızı raylar konsol modunda tetikleyin ve alt sınıflara/torunlara bakın ve hiç görmeyeceksiniz. Denetleyicilerin birinin adını yazın ve sonra adlandırılmış sınıf bir alt sınıf olarak görünecektir. ActiveAdmin bu konuda iyi bir iş gibi görünüyor ... GitHub'da kodlarını kontrol etmek isteyebilirsiniz. – Raels
Bu tam bir çözüm değildir çünkü tüm denetleyicileri almaz, yalnızca AplicationController'ın alt sınıflarını almaz. Hiyerarşinizde iki düzey yuvalama varsa, bunların hepsini kaydetmeyeceksiniz. Bunun yerine ApplicationController.descendants kullanın. Ve tüm denetleyicileri yükleme zamanında almak için Rails.application.eager_load'u kullanabilirsiniz! geliştirme veya test ortamı başlatıcıları ama tüm raylar yükünü yükleyecektir bir önyükleme yavaşlatabilir ve herhangi bir yan etkisi var farkında olun. –
: Eğer routes.rb dosyasında yollarını varsa
Rails.application.routes
Bu size tüm denetleyicileri, eylem ve onların rotalarını verecektir. Örneğin
:
routes= Rails.application.routes.routes.map do |route|
{alias: route.name, path: route.path, controller: route.defaults[:controller], action: route.defaults[:action]}
end
Güncelleme: Kod olur böylece Raylar 3.2 için , Journal of motor yolu değişti:
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
Güncelleme: Hala Raylar 4.2.7 için çalışan. (Gerçek soru başına) denetleyicilerin listesini çıkarmak için tek yapmanız gereken denetleyicisi ayıklamak ve edebilirsiniz uniq
controllers = Rails.application.routes.routes.map do |route|
route.defaults[:controller]
end.uniq
İşte kaynaklarım: https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/routes.rake https://github.com/rails/rails/blob/ master/railtiler/lib/raylar/application/route_inspector.rb Ayrıca rayların geliştirme modu sunucu bilgisi için dahili bir yol oluşturduğunu da fark ettim, ancak bu rotayı bulmak okuyucu için bir egzersiz yaptı. – nurettin
JDL yöntemi durumlarda bir dizi çalışacaktır @ denetleyici alt sınıflarını (örn ContactPageController
devralır varsa başarısız olsa da ApplicationController
'dan gelen PageController
).
routes
çalışmayabilir kullanma
::ApplicationController.descendants
bu gizlenecek:
nedenle daha iyi bir yöntem kullanmaktır. Özellikle
ApplicationController.subclasses
Ama gerçekten çizgi biçiminde tüm denetleyici adları gerekli benim durumumda, çözümü
@jdl sevdimalt sınıflar aktif yönetici için çalışmadı, ancak çalışmalarınız! teşekkür ederim – Fedcomp
(I altklasörlere örn yok: /admin
) Aşağıdaki kullandı:
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" }
Bu bize kontrolörün tam adını verir.Kalkınma ve içinde (Rails 5 iseniz) ve denetleyicileri ve eylemler haritaya ihtiyaç
Başka bir çözüm:
Rails.application.routes.set.anchored_routes.map(&:defaults)
Sen reddedebilirsiniz [: Dahili] Gerekirse:
.reject { |route| route[:internal] }
- 1. (Ruby, Rails) (Ruby, Rails)
- 2. Rails
- 3. Rails
- 4. Rails
- 5. Rails
- 6. Rails
- 7. Rails
- 8. Rails
- 9. Rails
- 10. Rails
- 11. Rails,
- 12. Rails
- 13. Rails
- 14. Rails
- 15. Rails
- 16. Rails
- 17. Rails
- 18. Rails
- 19. Rails
- 20. Rails
- 21. Rails
- 22. Rails
- 23. Rails
- 24. Rails
- 25. Rails
- 26. Rails
- 27. Rails
- 28. Rails
- 29. Rails
- 30. Rails
ise Denetleyicileri ve eylemleri listeleyeceksiniz, neden sadece komisyon rotalarını kullanmıyorsunuz? Çıkışın dağınık olduğundan emin olun, ancak bu, terminal pencerenizi genişleterek sabitlenmiştir. – EmFi
Sadece bağlantının yaptıklarına benzeyen hızlı bir kod koyuyordum. Biraz pratik yaparak hatırlıyorum. – Jim