Ответ 1
Чтобы гарантировать, что фильтры применяются ко всем действиям, поместите их в application_controller.rb.
Я хочу проверить, зарегистрирован ли пользователь на каждом отдельном запросе на сервер.
Что-то вроде:
:before_filter verify_logged_in
Где я должен поместить этот файл before_filter, чтобы он применялся ко всем действиям контроллера и всем запросам?
Чтобы гарантировать, что фильтры применяются ко всем действиям, поместите их в application_controller.rb.
Application Controller - это базовый класс всех других классов.
Если вы помещаете какой-либо фильтр в этот класс, поток работает следующим образом:
Если вы нажмете url на ресурс users
с любым действием, скажите index
действие, то:
Элемент управления сначала переходит в Application Controller
. Там он проверяет фильтры, если находит, то он выполняет метод фильтра, после чего он переходит к индексированию действия контроллера пользователей.
Контроллер приложений:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :verify_logged_in
end
Другой контроллер:
class UsersController < ApplicationController
def index
end
Здесь в приведенном выше коде вы видите, что другой контроллер наследует содержимое родительского контроллера, который является прикладным контроллером. Поэтому, если вы поместите before_filter
в контроллер приложения, то для каждого пользователя он проверяет, зарегистрирован ли пользователь для каждого запроса.
поместите before_filter в базовый класс (в файл application_controller.rb), он будет работать на основе и всех его производных классах, таких как
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] or I18n.default_locale
end
end
удачи: -)
Поместите его в ApplicationController
и наследуйте от него все остальные контроллеры. Если вы не перезаписываете verify_logged_in
в одном из ваших субконтроллеров, он просто работает.