Вы не должны создавать фрагмент кода, который проверяет имя контроллера, чтобы выполнить определенное действие в application.rb. Вы должны определить это перед фильтрами только в тех контроллерах, которые в них нуждаются
Сделать 2 метода в ApplicationController:
private
def require_master_or_power_user
unless @current_user.master? || @current_user.power?
render :template => "layouts/no_content"
end
end
def require_some_permisions
unless @current_user.permissions.count > 0
render :template => "layouts/no_content"
end
end
Теперь добавьте это как фильтр перед тем, где вам это нужно:
class UsersController < ApplicationController
before_filter :require_master_or_power_user
...
end
class AccountsController < ApplicationController
before_filter :require_master_or_power_user
...
end
class PostsController < ApplicationController
before_filter :require_some_permisions
...
end
Таким образом, ApplicationController определяет фильтры, но ваши контроллеры должны решать, использовать эти фильтры на самом деле или нет. Суперкласс, такой как ApplicationController, никогда не должен условно ветвить свое выполнение на основе его подклассов. Выбор того, когда использовать предоставленное поведение, является одной из причин, по которой вы хотите создать подкласс в первую очередь.
Это также намного понятнее с точки зрения читабельности кода. Если взглянуть на UsersController, сразу видно, что некоторые вещи с разрешениями происходят, когда вы видите фильтр before с именем, подобным «require_something». При вашем подходе вы не сможете понять это, взглянув на сам код контроллера пользователя.