как вы ставите перед фильтрами в модульных контроллерах? - PullRequest
1 голос
/ 16 марта 2011

У меня есть несколько контроллеров, которые находятся в модуле:

class SoapTest::DashboardController < ApplicationController

class SoapTest::TestCasesController < ApplicationController

и т. Д.

Я хочу иметь возможность проверить, есть ли у пользователя определенные разрешения для модуля, и так как яу меня нет «родительского» контроллера, где наследуются вышеперечисленные, я подумал поставить проверку в фильтре перед приложениями.Но я не могу получить имя модуля:

в контроллере приложения, у меня есть:

before_filter :check_company_features

def check_company_features
  puts controller_name
end

, но имя_контроллера просто возвращает «панель мониторинга».Мне нужно получить предложение "SoapTest"

1 Ответ

1 голос
/ 16 марта 2011

Обратите внимание, что вы в настоящее время называете modules на самом деле namespaces.

Причина, по которой controller_name возвращает только имя класса (а не полное имя), заключается в том, что Rails явно удаляетПространства имен.Вы можете получить их, вызвав метод Ruby #name в классе контроллера.

class SoapTest::DashboardController < ApplicationController
  before_filter :check_company_features

  def check_company_features
    puts controller_name
    # => "dashboard_controller"
    puts self.class.name
    # => "SoapTest::DashboardController"
  end 
end

Есть несколько методов перегиба String, которые вы можете вызвать на #name, чтобы получить отформатированную версию.

Однако я настоятельно рекомендую вам использовать основной контроллер с пространством имен.Вместо использования

class SoapTest::DashboardController < ApplicationController

вы можете расширить SoapTest::ApplicationController

class SoapTest::ApplicationController < ApplicationController
  before_filter :check_company_features

  def check_company_features
    # ...
  end
end

class SoapTest::DashboardController < SoapTest::ApplicationController
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...