如何使用Rails 3获取请求的目标控制器和操作?

ran*_*guy 44 ruby ruby-on-rails ruby-on-rails-3

在过滤器之前的应用程序控制器

class ApplicationController < ActionController::Base
  before_filter :authenticate

  def authenticate
    # How do we know which controller and action was targetted?
  end
end
Run Code Online (Sandbox Code Playgroud)

fl0*_*00r 83

class ApplicationController < ActionController::Base
  before_filter :authenticate

  def authenticate
    # How do we know which controller and action was targetted?
    params[:controller]
    params[:action]
    # OR
    controller.controller_name
    controller.action_name    
  end
end
Run Code Online (Sandbox Code Playgroud)

  • +1.我很惊讶这个问题有多少次被问到. (7认同)

Min*_*mul 15

在Rails 3.2中,您不再需要显式调用controller.action_name而只需调用"action_name".

before_filter :check_if_locked


def check_if_locked
  puts action_name
  puts controller_name
end
Run Code Online (Sandbox Code Playgroud)


Naz*_*ain 13

您可以使用完整的url对象

url = Rails.application.routes.recognize_path(request.env['PATH_INFO'])

现在你可以得到组件了

url[:controller]

url[:action]

默认情况下,您还可以在请求/响应生命周期中分别使用params[:controller]params[:action].


Moi*_*dar 5

request.parameters['controller']
request.parameters['action']
Run Code Online (Sandbox Code Playgroud)