2010-02-07 1 views
0

У меня есть код аутентификации, который будет доступен через несколько контроллеров. Поэтому я подумал о том, чтобы ввести код аутентификации в SuperClass, а затем заставить все остальные контроллеры расширить этот SuperClass. Затем я узнал, что мы можем добавить его в сам класс ActionController. Как мы можем сделать это? Есть ли способ изменить предварительно определенный класс?Как мы можем переопределить ActionController в рельсах для использования определенных методов?

ответ

1

Вы должны добавить методы в класс ApplicationController, который живет в app/controller/application_controller.rb, и является прямым суперклассом всех контроллеров вашего проекта (при условии, что вы создали свои контроллеры со сценарием/сгенерировали и не изменили суперкласс) ,

+0

Большое спасибо. Я пропустил, увидев, что уже есть класс ApplicationController. – MohamedSanaulla

+0

Одна вещь, которую я забыл спросить. В файле Routes.rb нам нужно использовать «ApplicationController» для указания используемого контроллера? – MohamedSanaulla

1

На самом деле все ваши контроллеры должны уже наследовать от ApplicationController, который, в свою очередь, наследует от ActionController::Base. И в том числе код аутентификации в ApplicationController довольно идиоматичен.

+0

Я знаю, что код может быть добавлен в ApplicationController. Но как мы это делаем? Мы создаем новый файл сценария и объявляем там класс ApplicationController? Я новичок в Rails, поэтому не очень понимаю, как это можно сделать. – MohamedSanaulla

+0

просто проверьте application_controller.rb (см. Ответ sepp2k для пути). а также убедитесь, что все остальные контроллеры наследуются от ApplicationController. –

0

Все контроллеры уже расширяют ApplicationController, поэтому просто добавьте способ авторизации и before_filter, вызывающий этот метод в вашем ApplicationController, и все будет настроено для всех ваших контроллеров.