Rails 4: before_filter против before_action


340

В rails> 4.0.0 генераторы создают операции CRUD с before_actionnot before_filter. Кажется, делает то же самое. Так в чем же разница между этими двумя?

Ответы:


521

Как мы можем видеть в ActionController::Base, before_actionэто просто новый синтаксис для before_filter.

Однако весь before_filtersсинтаксис устарел в Rails 5.0 и будет удален в Rails 5.1


42
С одной стороны, амортизация имеет смысл, но, с другой стороны, в рельсах и в ruby ​​рекомендуется использовать несколько псевдонимов для одного метода, чтобы вы могли использовать его в разных контекстах без потери смысла.
freemanoid

4
В 4.2 Они не осуждают это, но удаляют это из документов, так как это не рекомендуется. edgeguides.rubyonrails.org/…
onetwopunch

17
Если это обескураживает, то почему бы вам не осудить это? Глупо.
Грант Бирчмейер

4
@JohnWhitley - устаревание не нарушает API. В этом весь смысл устаревания.
Грант Бирчмайер

9
@JohnWhitley - рассылка спама по причине. Любой хорошо дисциплинированный проект должен учитывать предупреждения об устаревании, не используя устаревшие функции .
Грант Бирчмайер

67

Это просто синтаксическая разница, в приложении rails есть CRUD, и семь действий в основном по индексу имен , new , create , show , update , edit , destroy .

Rails 4 сделать его разработчик дружественного к синтаксису изменения перед фильтром , чтобы перед действием .

before_action вызывает метод перед действиями, которые мы объявляем, например

before_action :set_event, only: [:show, :update, :destroy, :edit]

set_event - это метод, который будет вызываться всегда перед показом, обновлением, редактированием и уничтожением.


31

Это просто смена имени. before_actionболее конкретно, потому что он выполняется перед действием.


1

before_filter / before_action: означает что-либо, что должно быть выполнено перед выполнением любого действия.

Оба одинаковы. они просто псевдонимы друг для друга, так как их поведение одинаково.


-3

Чтобы выяснить, в чем разница между before_action и before_filter, мы должны понять разницу между action и filter.

Действие - это метод контроллера, к которому вы можете направить маршрут. Например, ваша страница создания пользователя может быть перенаправлена ​​на UsersController # new - new - это действие на этом маршруте.

Фильтры работают относительно действий контроллера - до, после или вокруг них. Эти методы могут остановить обработку действия, перенаправив или настроив общие данные для каждого действия в контроллере.

Rails 4 -> _action

Rails 3 -> _filter

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.