【问题标题】:How to get request's target controller and action with Rails 3?如何使用 Rails 3 获取请求的目标控制器和操作?
【发布时间】:2011-07-22 01:35:23
【问题描述】:

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

class ApplicationController < ActionController::Base
  before_filter :authenticate

  def authenticate
    # How do we know which controller and action was targetted?
  end
end

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:
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

【讨论】:

  • 我已经准备好文件,里面有一堆标准问题的答案:)
  • 我们以前用params[:action] 就好了。但由于某种原因,在上个月左右,这停止了工作。现在它作为一个空哈希出现。但是,controller.action_name 继续工作。我们在 Rails 3.2 上。不知道为什么它停止工作,但我建议使用controller.action_name,因为它看起来更可靠。
【解决方案2】:

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

before_filter :check_if_locked


def check_if_locked
  puts action_name
  puts controller_name
end

【讨论】:

  • 我比 params 引用更喜欢这个,因为它去掉了路径前缀,只给出了控制器名称。
【解决方案3】:

您可以使用获取完整的 url 对象

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

现在你可以得到组件了

url[:controller]

url[:action]

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

【讨论】:

  • 方便的外部请求/响应周期,但在此期间绝对没有必要。
  • 这段代码非常方便解析存储在某个字符串变量中的url。
  • 编辑了在请求/响应周期内使用方式的答案。
  • 这仅适用于 HTTP GET 方法的请求。要支持所有方法,请使用url = Rails.application.routes.recognize_path(request.env['PATH_INFO'], { :method =&gt; request.env['REQUEST_METHOD'] })
【解决方案4】:
request.parameters['controller']
request.parameters['action']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2012-06-04
    • 2012-01-30
    相关资源
    最近更新 更多