Маршруты Rails обеспечивают наследование контроллера - PullRequest
1 голос
/ 15 декабря 2011

Есть ли способ обеспечить наследование контроллера от другого в объявлении маршрута? Например, если класс B был подклассом класса A, разрешите ему использовать маршрут. Как то так?

match '/login/:controller', :constraint => { :inherits => A }

Обновление

В качестве более конкретного примера у меня есть OAuthController, который принимает логины из нескольких источников. Допустим, Google, Facebook и Twitter. У меня есть GoogleController, FacebookController и TwitterController, которые являются подклассами OAuthController. Поэтому сейчас я принимаю следующие маршруты:

/login/google
/login/facebook
/login/twitter

Я могу добавить или удалить других в любое время, но я не хочу менять свой маршрут. Я также только хочу, чтобы: controller был подклассом: OAuthController. Есть ли способ обеспечить это?

1 Ответ

1 голос
/ 16 декабря 2011

Не думаю, что из коробки есть поддержка того, чего вы хотите достичь.Тем не менее, может быть способ пойти.Взгляните на "Руководства по маршрутизации, расширенные ограничения" .Он использует объект запроса , который не совсем то, что вы хотите иметь, но может быть достаточным.

Идея такова:

  • Реализация ограниченияс необходимыми методами.
  • В методе matches?(request) сделайте то, что хотите доказать.
  • Интегрируйте его, добавив ограничение маршрута:

    match "*path" => "login/:action",
      :constraints => LoginConstraint.new
    

Это код для реализации:

class BlacklistConstraint
  def initialize
    ... # necessary initialization here
  end

  def matches?(request)
    ... # Here is your check that returns true or false
  end
end
...