我的ApplicationController中有一个方法,它是before_filter的一部分。如何识别哪个控制器正在调用该方法,我可以将参数传递给它吗?
可能是最坏的情况,我可以使用控制器名称和值创建一个新对象,然后使用NewObject.find直接在before_filter方法中调用它(:first,:conditions => ['controller_name =?',controller_name ],但闻起来很糟糕。
所以我对创意持开放态度。提前谢谢。
伪短代码:
class ApplicationController < ActionController::Base
before_filter :someMethod
....
def someMethod
Do stuff
end
class SomeController < ApplicationController
# presumably the before_filter runs here
@someValueIWantToPass = some.value
...
答案 0 :(得分:10)
params[:controller]
和params[:action]
包含请求的控制器和操作,可从过滤器内部获取。
答案 1 :(得分:2)
使用self.class将告诉您哪个控制器调用了before_filter。
class HomeController < ApplicationController
before_filter :awesome
def index
render :text => @blah
end
def awesome
@blah = self.class
end
end
将呈现“HomeController”