[RUBY-ON-RAILS] 어떻게 레일의 현재 경로를 찾을 수 있습니까?
RUBY-ON-RAILS어떻게 레일의 현재 경로를 찾을 수 있습니까?
나는 레일에서 필터의 현재 경로를 알 필요가있다. 어떻게 그것이 무엇인지 알 수 있나요?
나는 REST 자원을하고, 어떤라는 이름의 경로를 볼거야.
해결법
-
==============================
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.당신이보기에 특별한 경우 뭔가하려고하는 경우에, 당신은 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.간단한 해결책은 내가 (레일 4를 사용하여 검증뿐만 아니라 레일 (3)을 사용하여 작동합니다) 2015 년에 가지고 올 수
간단한 해결책은 내가 (레일 4를 사용하여 검증뿐만 아니라 레일 (3)을 사용하여 작동합니다) 2015 년에 가지고 올 수
request.url # => "http://localhost:3000/lists/7/items" request.path # => "/lists/7/items"
-
==============================
4.이 작업을 수행 할 수 있습니다
이 작업을 수행 할 수 있습니다
Rails.application.routes.recognize_path "/your/path"
그것은 레일 3.1.0.rc4에 나를 위해 작동
-
==============================
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.@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.또는, 더 우아 : request.path_info
또는, 더 우아 : request.path_info
출처: 요청 랙 설명서
-
==============================
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.당신은 또한 매개 변수를 필요로한다 :
당신은 또한 매개 변수를 필요로한다 :
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.request.url
request.url
request.path는 기본 URL을 제외하고 경로를 얻을 #됐다
-
==============================
11.루트 (이 힘 당신을 도울) : 당신은 레이크을 통해 모든 경로를 볼 수 있습니다.
루트 (이 힘 당신을 도울) : 당신은 레이크을 통해 모든 경로를 볼 수 있습니다.
-
==============================
12.당신은 .. URI 요청 전체를 보려면 아래처럼이 출력됩니다 뭔가를 request.env [ 'REQUEST_URI'을] 할 수있다
당신은 .. URI 요청 전체를 보려면 아래처럼이 출력됩니다 뭔가를 request.env [ 'REQUEST_URI'을] 할 수있다
http://localhost:3000/client/1/users/1?name=test
-
==============================
13.이 작업을 수행 할 수 있습니다 :
이 작업을 수행 할 수 있습니다 :
def active_action?(controller) 'active' if controller.remove('/') == controller_name end
지금, 당신은 다음과 같이 사용할 수 있습니다 :
<%= link_to users_path, class: "some-class #{active_action? users_path}" %>
from https://stackoverflow.com/questions/1203892/how-can-i-find-out-the-current-route-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 도우미 안쪽 컨트롤러를 사용하는 - 난간 (0) | 2020.02.17 |
---|---|
[RUBY-ON-RAILS] 어떻게 레일의 액티브 모델과 그 테이블의 이름을 변경하는 마이그레이션을 작성하려면 어떻게해야합니까? (0) | 2020.02.17 |
[RUBY-ON-RAILS] 느린 초기 서버 시작 Phusion 여객 및 레일을 사용하는 경우 (0) | 2020.02.17 |
[RUBY-ON-RAILS] 사용 rvmrc 또는 루비 버전 파일은 RVM와 프로젝트 gemset를 설정하는 방법? (0) | 2020.02.17 |
[RUBY-ON-RAILS] AWS이있을 때 사람들은 왜 Heroku가 사용합니까? 무엇 AWS에서 Heroku가 구별? [닫은] (0) | 2020.02.17 |