Причина, по которой оператор render
в действии не возвращает выполнение кода, состоит в том, что разумным вариантом использования является то, что после рендеринга в действии существует дополнительный (не отображающий) код.
Причина, по которой рендеринг в обратном вызове before_action
не позволяет выполнению кода войти в действие, состоит в том, что это предполагает, что у вас есть действия, которые имеют пути к коду, которые не рендерится и не перенаправляются (в противном случае вы получитедвойная ошибка рендеринга).Этот путь кода в действии является гораздо менее разумным вариантом использования, потому что он будет полагаться на фильтр «до», который уже запустил и выполнил рендеринг.
Намерение структуры действий и фильтров Rails вКонтроллеры в том, что они не так тесно связаны.Обычно фильтр не знает о том, какое действие будет выполнено после него, а действие не знает о том, какие фильтры сработали до его запуска.Таким образом, чтобы заставить их координировать то, что делает рендеринг, это сломало бы эту слабую связь.Каждое действие должно предполагать, что рендеринг является неотъемлемой частью его роли, поэтому не имеет смысла запускать действие, если фильтр уже отрендерен.