Как переопределить маршруты приложений Rails из движка? - PullRequest
5 голосов
/ 10 июня 2011

У меня есть приложение Rails, в которое я пытаюсь интегрировать движок Rails.

В хост-приложении есть несколько перехватов всех маршрутов:

  # magic urls
  match '/' => 'admin/rendering#show'
  match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
  match '*path' => 'admin/rendering#show'

Похоже на маршруты движказагружаются после того, как приложение перехватывает все маршруты.

/sitemap.xml(.:format)                                            {:format=>"xml", :controller=>"admin/sitemaps", :action=>"show"}
                              /(.:format)                                                       {:controller=>"admin/rendering", :action=>"show"}
                              /*path/edit(.:format)                                             {:controller=>"admin/rendering", :action=>"show"}
                              /*path                                                            {:controller=>"admin/rendering", :action=>"show"}
           engine_envs GET    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"show"}
                       PUT    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"update"}
                jammit        /assets/:package.:extension(.:format)                             {:extension=>/.+/, :controller=>"jammit", :action=>"package"}

Пока все сталкивается с тем, что /engine/envs маршруты перехватываются приложением перехватывать все маршруты.Однако я вижу, что маршрут с джеммитом загружается после двигателя, и я не верю, что его поймают.Есть ли способ переопределить маршруты приложения?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Вы можете прикрепить маршруты вашего движка в методе, а затем вызвать его в вашем хост-приложении.

# engine routes.rb
module ActionDispatch::Routing
  class Mapper
    def engine_routes
      engine_envs GET    /engine/envs/:id(.:format)
      # ...
    end 
# ...

, а затем в вашем хост-приложении добавить метод перед универсальным маршрутом

# host app routes.rb
MyTestApp::Application.routes.draw do
  # ... 

  engine_routes

  match '/' => 'admin/rendering#show'
  match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
  match '*path' => 'admin/rendering#show'
end
0 голосов
/ 06 июля 2011

Маршруты используются в порядке их определения.Первые маршруты, которые нужно прочитать, - это приложение хоста, а затем вашего движка.

Как только найден соответствующий маршрут, поиск маршрута останавливается.

Насколько далекокак я знаю, нет никакого способа (я могу ошибаться в этом) переопределить эту функцию, кроме как изменить свое «mag

UPDATE»: это означает, что порядок, который вы видите в «рейковых маршрутах»,порядок, в котором они обрабатываются. Как только соответствующий маршрут найден, вы идете.

...