Можно ли вызвать before_filter из другого? Причина, по которой я спрашиваю, состоит в том, что у меня есть два похожих before_filters, но у меня есть дополнительное условие, которое все еще могло бы быть правдой. Итак, если первый before_filter истинен, чем второй, также верно, но если первое ложно, проверяется другое условие, а затем определяется, является ли оно истинным или ложным.Вы можете вызвать before_filter из другого before_filter в Ruby on Rails?
ответ
Это правильно, что фильтры только методы, поэтому ответить на ваш вопрос:
Да, это можно назвать фильтры из другого фильтра.
НО Остерегайтесь того, что вы не должны перерисовывать или перенаправлять дважды, иначе вы получите AbstractController::DoubleRenderError
. Таким образом, если один из фильтров является рендерингом, вы не должны вызывать другой фильтр.
Используйте значения возвращаемых значений boolean для управления этим.
Если вы не хотите комбинировать методы, я мог бы сделать что-то подобное.
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
Вы можете. A before_filter - это просто триггер, вызывающий обычный метод. Этот метод может вызывать любой другой метод, даже методы, вызываемые другими before_filters.
Предостережение заключается в том, что фильтр часто будет отображать или перенаправлять. Вы должны позаботиться об этом. –
Почему бы просто не объединить два фильтра в один метод, заменив их одним фильтром? –
Поскольку один из фильтров представляет собой специальный кромка края, persay и вызывается только из одного действия контроллера, а другой - из многих. – dmastylo