2009-06-18 4 views
0

У меня есть метод в моем ApplicationController, который является частью файла before_filter. Как определить, какой контроллер вызывает этот метод, и могу ли я передать ему аргументы?Идентификация вызывающего метода в ApplicationController (RoR)

Предположительно худший случай, я могу создать новый объект, где я использую имена и значения контроллера, а затем вызывать его непосредственно в методе before_filter с помощью метода NewObject.find (: first,: conditions => ['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 
    ... 

ответ

8

params[:controller] и params[:action] содержит контроллер и действие, запрошенное, и доступны из внутри фильтра.

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»