Ruby on Rails에 API를 작성했으며 사용할 수있는 모든 경로를 나열하는 페이지가 하나 있습니다 (이 방법은 rake routes
을 사용하여 명령 줄을 통해 수행 할 수 있음을 알고 있습니다).보기/컨트롤러의 경로 표시
코드를 업데이트 할 때마다 직접 업데이트하지 않고 자동으로 생성하려고합니다. 컨트롤러 (또는 뷰)의 모든 경로 목록을 가져 오는 방법이 있습니까?
Ruby on Rails에 API를 작성했으며 사용할 수있는 모든 경로를 나열하는 페이지가 하나 있습니다 (이 방법은 rake routes
을 사용하여 명령 줄을 통해 수행 할 수 있음을 알고 있습니다).보기/컨트롤러의 경로 표시
코드를 업데이트 할 때마다 직접 업데이트하지 않고 자동으로 생성하려고합니다. 컨트롤러 (또는 뷰)의 모든 경로 목록을 가져 오는 방법이 있습니까?
레이크 루트에 대한 레이크 작업을 구현하는 방법을 살펴볼 수 있습니다. lib/rails/tasks/routes.rake
안에있는 레일 티 보석에서 찾을 수 있습니다. 나는 그것이 RouteInspector should not be used 것을 언급 한 문서에 jvnill에 의해 주어지고있는 솔루션을 탐구하기 시작
task :routes => :environment do
Rails.application.reload_routes!
all_routes = Rails.application.routes.routes
require 'rails/application/route_inspector'
inspector = Rails::Application::RouteInspector.new
puts inspector.format(all_routes, ENV['CONTROLLER']).join "\n"
end
완벽하게 작동합니다. 감사! – chrisbulmer
@chrisbulmer 안녕하세요. 나는 초보자이며 이것에 대한 해답을 찾고있다. 모든 경로를 나열하는 별도의 페이지를 어떻게 만들었습니까? – Vinay
@Vinay 새로운 컨트롤러와 액션을 만들었습니다 (레일즈 컨트롤러 루트를 보여줍니다). 라우트 파일에 라우트를 추가했습니다. 위의 대답에서 컨트롤러의 3 번째 줄을 추가했지만 변수 앞에 @ 기호를 넣고보기에서 마지막 세 줄을 '<%'태그 사이에 넣습니다. – chrisbulmer
하지만 쉽게하기 위해, 여기있다. 어떤 이유인지 모르겠지만 코드를 살펴보고 단순한 문자열이 아닌보다 유용한 출력을 얻으려고합니다. jvnill 코드를 시작점으로 사용했습니다.
all_routes = Rails.application.routes.routes
routes = all_routes.routes.collect do | route |
reqs = route.requirements
controller = reqs[:controller] || ':controller'
action = reqs[:action] || ':action'
constraints = reqs.except(:controller, :action)
verb = route.verb.source.gsub(/[$^]/, '')
{name: route.name.to_s, verb: verb, path: route.path.spec.to_s, reqs: reqs}
end
routes.reject! { |r| r[:path].starts_with?("/rails/info/properties") || r[:path] == "#{Rails.application.config.assets.prefix}" }
routes
다음 경로, 경로 제어부 및 행동의 이름을 포함하는 해시를 포함한다.
좋은 크리스. 늦은 답변 죄송합니다. 나는 역에서 나왔다. 귀하의 코드를 시도했지만 여전히 같은 페이지가 있습니다. – Vinay
+1 정답으로이 질문을 찾고 있습니다. – Vinay