복붙노트

[RUBY-ON-RAILS] 어떻게 레일의 현재 경로를 찾을 수 있습니까?

RUBY-ON-RAILS

어떻게 레일의 현재 경로를 찾을 수 있습니까?

나는 레일에서 필터의 현재 경로를 알 필요가있다. 어떻게 그것이 무엇인지 알 수 있나요?

나는 REST 자원을하고, 어떤라는 이름의 경로를 볼거야.

해결법

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

    1.URI를 확인하는 방법은 다음과 같습니다

    URI를 확인하는 방법은 다음과 같습니다

    current_uri = request.env['PATH_INFO']
    # If you are browsing http://example.com/my/test/path, 
    # then above line will yield current_uri as "/my/test/path"
    

    경로 즉 컨트롤러, 액션, params가를 확인하는 방법은 다음과 같습니다

    path = ActionController::Routing::Routes.recognize_path "/your/path/here/"
    
    # ...or newer Rails versions:
    #
    path = Rails.application.routes.recognize_path('/your/path/here')
    
    controller = path[:controller]
    action = path[:action]
    # You will most certainly know that params are available in 'params' hash
    
  2. ==============================

    2.당신이보기에 특별한 경우 뭔가하려고하는 경우에, 당신은 CURRENT_PAGE를 사용할 수 있습니까? 같이 :

    당신이보기에 특별한 경우 뭔가하려고하는 경우에, 당신은 CURRENT_PAGE를 사용할 수 있습니까? 같이 :

    <% if current_page?(:controller => 'users', :action => 'index') %>
    

    ... 또는 조치 및 ID ...

    <% if current_page?(:controller => 'users', :action => 'show', :id => 1) %>
    

    ... 또는 명명 된 경로 ...

    <% if current_page?(users_path) %>
    

    ...과

    <% if current_page?(user_path(1)) %>
    

    CURRENT_PAGE 때문에? 둘 다 그냥 컨트롤러에 대해 신경 때 나는 current_controller을, 컨트롤러와 조치가 필요? 와 ApplicationController의 방법 :

      def current_controller?(names)
        names.include?(current_controller)
      end
    

    그리고 다음과 같이 사용 :

    <% if current_controller?('users') %>
    

    ... 여러 컨트롤러 이름으로 작동하는 ...

    <% if current_controller?(['users', 'comments']) %>
    
  3. ==============================

    3.간단한 해결책은 내가 (레일 4를 사용하여 검증뿐만 아니라 레일 (3)을 사용하여 작동합니다) 2015 년에 가지고 올 수

    간단한 해결책은 내가 (레일 4를 사용하여 검증뿐만 아니라 레일 (3)을 사용하여 작동합니다) 2015 년에 가지고 올 수

    request.url
    # => "http://localhost:3000/lists/7/items"
    request.path
    # => "/lists/7/items"
    
  4. ==============================

    4.이 작업을 수행 할 수 있습니다

    이 작업을 수행 할 수 있습니다

    Rails.application.routes.recognize_path "/your/path"
    

    그것은 레일 3.1.0.rc4에 나를 위해 작동

  5. ==============================

    5.레일 3에서는 다음 직접에 인식 호출합니다 Rails.application.routes 객체를 통해 랙 :: 마운트 :: RouteSet 개체에 액세스 할 수 있습니다

    레일 3에서는 다음 직접에 인식 호출합니다 Rails.application.routes 객체를 통해 랙 :: 마운트 :: RouteSet 개체에 액세스 할 수 있습니다

    route, match, params = Rails.application.routes.set.recognize(controller.request)
    

    그 첫 번째 (최고) 일치, 일치하는 경로에 비해 다음과 같은 블록 형태의 루프를 가져옵니다

    Rails.application.routes.set.recognize(controller.request) do |r, m, p|
      ... do something here ...
    end
    

    당신이 경로를 한 후에는 route.name를 통해 경로 이름을 얻을 수 있습니다. 특정 URL이 아닌 현재 요청 경로에 대한 경로 이름을 얻을 필요가있는 경우에, 당신은 볼 수 ActionController :: 라우팅 :: Routes.recognize_path을, 랙 아래로 통과 체크 아웃 가짜 요청 객체를 조롱해야합니다 그들이 어떻게 그 일을하고 있습니다.

  6. ==============================

    6.@AmNaN 제안 (자세한 내용)을 기반으로 :

    @AmNaN 제안 (자세한 내용)을 기반으로 :

    class ApplicationController < ActionController::Base
    
     def current_controller?(names)
      names.include?(params[:controller]) unless params[:controller].blank? || false
     end
    
     helper_method :current_controller?
    
    end
    

    지금 당신은 예를 들어, 호출 할 수 있습니다 내비게이션에서 활성으로 목록 항목을 표시하기위한 레이아웃 :

    <ul class="nav nav-tabs">
      <li role="presentation" class="<%= current_controller?('items') ? 'active' : '' %>">
        <%= link_to user_items_path(current_user) do %>
          <i class="fa fa-cloud-upload"></i>
        <% end %>
      </li>
      <li role="presentation" class="<%= current_controller?('users') ? 'active' : '' %>">
        <%= link_to users_path do %>
          <i class="fa fa-newspaper-o"></i>
        <% end %>
      </li>
      <li role="presentation" class="<%= current_controller?('alerts') ? 'active' : '' %>">
        <%= link_to alerts_path do %>
          <i class="fa fa-bell-o"></i>
        <% end %>
      </li>
    </ul>
    

    사용자 및 경고 경로 CURRENT_PAGE 들어? 충분히 될 것이다 :

     current_page?(users_path)
     current_page?(alerts_path)
    

    그러나 (항목과 비교) 컨트롤러의 모든 행동에 대한 중첩 된 경로와 요청과 함께, current_controller? 나를 위해 더 나은 방법이었다 :

     resources :users do 
      resources :items
     end
    

    첫 번째 메뉴 항목은 다음 경로에 대해 활성화하는 방법입니다 :

       /users/x/items        #index
       /users/x/items/x      #show
       /users/x/items/new    #new
       /users/x/items/x/edit #edit
    
  7. ==============================

    7.또는, 더 우아 : request.path_info

    또는, 더 우아 : request.path_info

    출처: 요청 랙 설명서

  8. ==============================

    8.나는 당신이 URI 의미 가정합니다 :

    나는 당신이 URI 의미 가정합니다 :

    class BankController < ActionController::Base
      before_filter :pre_process 
    
      def index
        # do something
      end
    
      private
        def pre_process
          logger.debug("The URL" + request.url)
        end
    end
    

    당신이 컨트롤러의 이름을 필요로하는 경우 아래의 코멘트에 따라, 당신은 단순히이 작업을 수행 할 수 있습니다

      private
        def pre_process
          self.controller_name        #  Will return "order"
          self.controller_class_name  # Will return "OrderController"
        end
    
  9. ==============================

    9.당신은 또한 매개 변수를 필요로한다 :

    당신은 또한 매개 변수를 필요로한다 :

    current_fullpath = request.env['ORIGINAL_FULLPATH']
    # If you are browsing http://example.com/my/test/path?param_n=N 
    # then current_fullpath will point to "/my/test/path?param_n=N"
    

    그리고 당신은 항상 사용할 수있는 모든 옵션을 볼 수있는보기에 <% = 디버그 request.env %>를 호출 할 수 있습니다 기억하십시오.

  10. ==============================

    10.request.url

    request.url

    request.path는 기본 URL을 제외하고 경로를 얻을 #됐다

  11. ==============================

    11.루트 (이 힘 당신을 도울) : 당신은 레이크을 통해 모든 경로를 볼 수 있습니다.

    루트 (이 힘 당신을 도울) : 당신은 레이크을 통해 모든 경로를 볼 수 있습니다.

  12. ==============================

    12.당신은 .. URI 요청 전체를 보려면 아래처럼이 출력됩니다 뭔가를 request.env [ 'REQUEST_URI'을] 할 수있다

    당신은 .. URI 요청 전체를 보려면 아래처럼이 출력됩니다 뭔가를 request.env [ 'REQUEST_URI'을] 할 수있다

    http://localhost:3000/client/1/users/1?name=test
    
  13. ==============================

    13.이 작업을 수행 할 수 있습니다 :

    이 작업을 수행 할 수 있습니다 :

    def active_action?(controller)
       'active' if controller.remove('/') == controller_name
    end
    

    지금, 당신은 다음과 같이 사용할 수 있습니다 :

    <%= link_to users_path, class: "some-class #{active_action? users_path}" %>
    
  14. from https://stackoverflow.com/questions/1203892/how-can-i-find-out-the-current-route-in-rails by cc-by-sa and MIT license