복붙노트

[RUBY-ON-RAILS] 프로그래밍 레일의 모든 컨트롤러를 나열하는 방법

RUBY-ON-RAILS

프로그래밍 레일의 모든 컨트롤러를 나열하는 방법

실제로 구성 객체의 많은 종류의 관리에 나는 편안한 응용 프로그램을 구축하기 위해 노력하고있어 그래서 "자원"유형의 많은 양의, 따라서 컨트롤러 많이 있습니다. 나는 첫번째 탐색 페이지에있는 모든 컨트롤러를 보여줄 수 있다면 좋을 것입니다 그래서 (프로그램) 어떤 쉬운 방법이 그렇게 할 수 있도록 나는의 POC 단계에서 아직도있어?

해결법

  1. ==============================

    1.3.1 레일 :

    3.1 레일 :

    Rails.application.routes
    

    당신이 당신의 routes.rb 파일에 자신의 경로를 가지고있을 때 당신에게 모든 컨트롤러, 행동과 자신의 경로를 제공 할 것입니다.

    예를 들면 :

    routes= Rails.application.routes.routes.map do |route|
      {alias: route.name, path: route.path, controller: route.defaults[:controller], action: route.defaults[:action]}
    end
    

    최신 정보: 코드가되도록 레일 3.2은 저널 엔진 경로 변경 :

    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
    

    최신 정보: 아직 레일 4.2.7에서 근무. (실제 질문 당) 컨트롤러 목록을 추출하려면, 당신은 단순히 컨트롤러와 UNIQ을 추출 할 수 있습니다

    controllers = Rails.application.routes.routes.map do |route|
      route.defaults[:controller]
    end.uniq
    
  2. ==============================

    2.

    ApplicationController.subclasses
    

    그것은 당신이 시작하는, 그러나 실제로로드되어 있는지를 보여 있기 때문에 개발 모드에서 당신은 많이 볼 수 없습니다 것을 명심하겠습니다. 생산 모드에서 불, 당신은 모든 컨트롤러의 목록을 볼 수 있습니다.

  3. ==============================

    3.@ JDL의 방법은 여러 상황에서 작동하지만 그것은 당신이 컨트롤러 서브 클래스가있는 경우 실패 (예를 들어 PageController에서 ContactPageController 상속와 ApplicationController로부터의 상속).

    @ JDL의 방법은 여러 상황에서 작동하지만 그것은 당신이 컨트롤러 서브 클래스가있는 경우 실패 (예를 들어 PageController에서 ContactPageController 상속와 ApplicationController로부터의 상속).

    따라서 더 나은 방법을 사용하는 것입니다 :

    ::ApplicationController.descendants
    

    이 부품은 엔진으로 추상화하는 복잡한 응용 프로그램이있는 경우 작동하지 않을 수 있습니다 경로를 사용하여 이러한 숨겨집니다.

  4. ==============================

    4.나는 특히 @jdl 솔루션을 좋아

    나는 특히 @jdl 솔루션을 좋아

    ApplicationController.subclasses
    

    나는 다음을 사용 :하지만 난 정말 밑줄 형식의 모든 컨트롤러의 이름을 필요로 내 경우에 (/ 관리자 나 하위 디렉토리 예를 들어이 없습니다)

    Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| path.match(/(\w+)_controller.rb/); $1 }.compact
    
  5. ==============================

    5.구글은 '목록 컨트롤러를 레일'

    구글은 '목록 컨트롤러를 레일'

    첫 번째 결과.

    http://snippets.dzone.com/posts/show/4792

    서브 클래스에 대한 학습 후, 나는 내 링크에서 코드로 간단하게 할 수 있다고 생각 ..

    ApplicationController.subclasses.each do |c|
      puts "Controller: #{c}"
      puts "Actions: #{c.constantize.action_methods.collect{|a| a.to_s}.join(', ')}"
    end
    
  6. ==============================

    6.또 다른 솔루션 개발 및 컨트롤러와 액션을 매핑 할 필요 (당신이 레일 (5) 인 경우) :

    또 다른 솔루션 개발 및 컨트롤러와 액션을 매핑 할 필요 (당신이 레일 (5) 인 경우) :

    Rails.application.routes.set.anchored_routes.map(&:defaults)
    

    당신은 거부 할 수 있습니다 [: 내부] 필요한 경우 :

    .reject { |route| route[:internal] }
    
  7. ==============================

    7.

    Dir[Rails.root.join('app/controllers/*_controller.rb')].map { |path| (path.match(/(\w+)_controller.rb/); $1).camelize+"Controller" }
    

    이 컨트롤러 파일 내에서 나타나는이 우리에게 컨트롤러의 정확한 이름을 제공합니다.

  8. from https://stackoverflow.com/questions/1564278/how-to-programmatically-list-all-controllers-in-rails by cc-by-sa and MIT license