레일-컨트롤러 조치 이름을 문자열로


160

Rails 질문이 있습니다.

컨트롤러 작업 내에서 컨트롤러 작업의 이름을 얻으려면 어떻게합니까?

예를 들어

def create
  logger.info("create")
end

나는 같은 것을 쓰고 싶다

def create
  logger.info(this_def_name)
end

얻는 방법은 무엇입니까 this_def_name?

답변:


337

레일스 2.X :@controller.action_name

레일스 3.1.X : controller.action_name,action_name

레일스 4.X :action_name


5
또는 Rails 3.0에서 'controller.action_name'. 보기에서 조치 이름에 액세스하는 가장 좋은 방법입니다.
emk

2
이것을 before_filter블록과 함께 사용하려면을 수행하십시오 before_filter { |controller| ... }. stackoverflow.com/questions/2669663/…
Benjamin Oakes

3
참고 action_name로 Rails 3.2.13에서 작동 controller.action_name하지만 그렇지 않습니다.
Zach

레일 2.3.XX 및 @ controller.action_name이 작동하지 않으면이 버전에 action_name 만 사용해야합니다.
mkralla11

심볼 버전이 있습니까?
Bogdan Gusiev

34

Rails 액션의 특정 경우 (현재 메소드 이름을 얻는 일반적인 경우와 달리) params[:action]

또는 작업 / 방법 이름이 로그 메시지가 아닌 형식으로 포함되도록 Rails 로그 형식을 사용자 정의 할 수 있습니다.


8
이전에 action_name을 호출하여 현재 작업을 수행 할 수 있었지만 여전히 작동하는지 확실하지 않지만 항상 매개 변수를 쿼리하는 것보다 조금 좋았습니다.
jonnii

명확하게 설명하기 위해 "controller.action_name"또는 "params [: action]"이므로보기에서 controller.action_name == 'new'%> 인 경우 <%를 수행 할 수 있습니다. Rails 3.2에서 작동합니다.
dmonopoly

1
params [: controller]
Ash Blue

action_name == 'new'(접두사 없음) 여전히 Rails 3.2에서 작동합니다.
Brendon Muir

17

컨트롤러 이름 :

<%= controller.controller_name %>

return => '사용자'

액션 이름 :

<%= controller.action_name %>

return => '쇼'

신분증:

<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>

return => '23'


7

이 스 니펫은 Rails 3에서 작동합니다

class ReportsController < ApplicationController

  def summary
    logger.debug self.class.to_s + "." + self.action_name
  end

end

인쇄합니다

. . .
ReportsController.summary
. . .


3

mikej의 대답은 매우 정확하고 도움이되었지만 내가 알고 싶었던 것은 현재 메소드 이름을 레일로 얻는 방법이었습니다.

self.current_method로 가능하다는 것을 알았습니다.

http://www.ruby-forum.com/topic/75258 에서 쉽게 찾을 수 있습니다 .


-4

나는 방금 똑같이했다. 도우미 컨트롤러에서 수행했습니다. 내 코드는 다음과 같습니다.

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

이 메소드는 현재 제어 자와 조치 이름을 리턴합니다. 그것이 도움이되기를 바랍니다.


39
혼란스러운. wrap controller_name은 왜 호출 하는 다른 메소드에서 현재 컨트롤러의 이름을 리턴하는 메소드 controller_name입니까? 왜 전화 controller_name해서 끝내지 않겠습니까?
piersadrian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.