ApplicationController中具有params值的类变量

时间:2011-06-29 11:39:59

标签: ruby-on-rails ruby

在应用程序控制器中,我有几种方法可以处理所请求的控制器和操作名称。

要遵循DRY原则,我想用这些参数定义共享变量。

class ApplicationController < ActionController::Base
   @@requested_action     = params[:action]
   @@requested_controller = params[:controller]
end

但我收到错误:undefined local variable or method "params" for ApplicationController:Class

为什么我不能这样做,我怎样才能达到目标?

3 个答案:

答案 0 :(得分:4)

我相信您已经为此目的定义了Rails定义的controller_nameaction_name变量。

如果您想按照自己的方式进行操作,则必须将其定义为之前的过滤器,因为只有在请求发出后,params才会存在。你可以做这样的事情

class ApplicationController < ActionController::Base
  before_filter :set_action_and_controller

  def set_action_and_controller
    @controller_name = params[:controller]
    @action_name = params[:action]
  end
end

您可以将它们作为@controller_name和@action_name访问。但是controller_nameaction_name已在Rails中定义。您可以直接使用它们。

答案 1 :(得分:2)

改为使用实例方法:

class ApplicationController < ActionController::Base
  def requested_action
    params[:action] if params
  end
end

答案 2 :(得分:2)

您可以使用before_filter选项。

class ApplicationController < ActionController::Base
  before_filter :set_share_variable

  protected

  def set_share_variable
    @requested_action     = params[:action]
    @requested_controller = params[:controller]
  end
end