Rails 2.3.12: маршрутизация 'GET / foo', 'PUT / foo' и '<any> / foo / bar' отдельно - PullRequest
1 голос
/ 06 сентября 2011

У меня есть приложение Rails 2.3.12, которое работает для другого приложения.Позвоните в другое приложение foo;все URI, отправленные в мое приложение, будут начинаться с /foo.Мое приложение Rails должно обрабатывать следующие случаи:

  1. GET /foo - мое приложение обрабатывает напрямую (возвращает список поддерживаемых функций)
  2. <anything-else> /foo - возвращает 401 ( т.е. , GET - единственный поддерживаемый глагол HTTP)
  3. <anything> /foo/<anything> - обрабатывается моим приложением для передачи в приложение foo.

К сожалению, все мои попытки до сих пор привели к тому, что все было выставлено либо по случаям 1 и 2, либо по случаю 3. Вот что у меня есть в моем routes.rb на данный момент:

     map.root(:controller       => 'application',
              :action           => 'render_401_unauthorised')
  map.connect('fooapp/*fooapp_ep_path',
              :controller       => 'foo',
              :action           => 'parsepath')
  map.connect('fooapp',
              :controller       => 'other_controller',
              :action           => 'index',
              :conditions       => { :method => :get })
  map.connect('fooapp',
              :controller       => 'application',
              :action           => 'render_401_unauthorised')

Я думаю, что моя проблема исчезла бы, если бы я мог убедиться, что первое map.connect будет только совпадать, если *fooap_ep_path не пусто - то есть , соответствуетрегулярное выражение %r!/foo/.+!

Можно ли это сделать?

Спасибо!

Обновлено Если есть какой-либо способ указать, что путь глоба должно быть [не] пустым, что, вероятно, обеспечит необходимый клей.

1 Ответ

0 голосов
/ 30 сентября 2011

Я решил, используя #with_options в соответствии с

map.with_options({}) do |ap,*args|
  ap.name1('fooapp',
           :controller    => 'can_do',
           :action        => 'index',
           :conditions    => { :method => :get }
          )
  ap.name2('fooapp',
           :controller    => 'can_do',
           :action        => 'render_403_forbidden'
          )
  ap.name3('fooapp/*fooapp_path',
           :controller    => 'other',
           :action        => 'do_it'
          )
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...