在应用程序控制器中,我有几种方法可以处理所请求的控制器和操作名称。
要遵循DRY原则,我想用这些参数定义共享变量。
class ApplicationController < ActionController::Base
@@requested_action = params[:action]
@@requested_controller = params[:controller]
end
但我收到错误:undefined local variable or method "params" for ApplicationController:Class
为什么我不能这样做,我怎样才能达到目标?
答案 0 :(得分:4)
我相信您已经为此目的定义了Rails定义的controller_name
和action_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_name
和action_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