Ответ 1
before_action
(ранее называемый before_filter
) - это обратный вызов, который выполняется перед выполнением действия. Вы можете больше узнать о контроллере before/after_action.
Обычно он используется для подготовки действия или изменения исполнения.
Соглашение заключается в том, что если какой-либо из методов в цепочке визуализировать или перенаправлять, то выполнение останавливается и действие не отображается.
before_action :check_permission
def hello
end
protected
def check_permission
unless current_user.admin?
# head is equivalent to a rendering
head(403)
end
end
В этом примере, если current_user.admin?
возвращает false, действие hello
никогда не выполняется.
Ниже приведен пример установки действий:
before_action :find_post
def show
# ...
end
def edit
# ...
end
def update
# ...
end
protected
def find_post
@post = Post.find(params[:id])
end
В этом случае find_post
никогда не вернет false. Фактически, целью этого before_action является извлечение общей команды из тела действий.
О возврате false
, насколько я знаю, это верно для обратных вызовов ActiveRecord. Но для before_action возвращение false не имеет никакого эффекта. Фактически, возвращаемая стоимость не упоминается как важная в официальной документации.