识别ApplicationController(RoR)中方法的调用者

时间:2009-06-18 15:53:25

标签: ruby-on-rails ruby

我的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
    ...

2 个答案:

答案 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”