2013-01-08 2 views
1

Можно ли вызвать before_filter из другого? Причина, по которой я спрашиваю, состоит в том, что у меня есть два похожих before_filters, но у меня есть дополнительное условие, которое все еще могло бы быть правдой. Итак, если первый before_filter истинен, чем второй, также верно, но если первое ложно, проверяется другое условие, а затем определяется, является ли оно истинным или ложным.Вы можете вызвать before_filter из другого before_filter в Ruby on Rails?

+3

Почему бы просто не объединить два фильтра в один метод, заменив их одним фильтром? –

+0

Поскольку один из фильтров представляет собой специальный кромка края, persay и вызывается только из одного действия контроллера, а другой - из многих. – dmastylo

ответ

1

Это правильно, что фильтры только методы, поэтому ответить на ваш вопрос:

Да, это можно назвать фильтры из другого фильтра.

НО Остерегайтесь того, что вы не должны перерисовывать или перенаправлять дважды, иначе вы получите AbstractController::DoubleRenderError. Таким образом, если один из фильтров является рендерингом, вы не должны вызывать другой фильтр.

Используйте значения возвращаемых значений boolean для управления этим.

-1

Если вы не хотите комбинировать методы, я мог бы сделать что-то подобное.

before_filter :filter_method 

def filter_method 
if method_one == true 
    method_two 
end 
end 

def method_one 
# stuff here 
end 

def method_two 
# stuff here 
end 
0

Вы можете. A before_filter - это просто триггер, вызывающий обычный метод. Этот метод может вызывать любой другой метод, даже методы, вызываемые другими before_filters.

+0

Предостережение заключается в том, что фильтр часто будет отображать или перенаправлять. Вы должны позаботиться об этом. –