2014-03-13 91 views
5

我有一個導軌4的應用,其中所有的控制器和視圖被分成兩個命名空間,backend的面向劑和一個面向客戶的frontend在Rails 4中爲URL Helper設置默認名稱空間?

MyApp::Application.routes.draw do 
    constraints subdomain: "admin" do 
    namespace :backend do 
     resources :events 
    end 
    end 

    constraints subdomain: /.+/ do     
    namespace :frontend do 
     resources :events 
    end 
    end 
end 

此外,所有的控制器從任BackendControllerFrontendController繼承:

controllers 
├── application_controller.rb 
├── backend 
│   ├── events_controller.rb 
├── backend_controller.rb 
├── frontend 
│   └── events_controller.rb 
├── frontend_controller.rb 

眼下的一切,需要生成的路徑必須與命名空間前綴,如respond_with [:backend, @event]form_for [:backend, @event]

是否有一種方法可以爲每個控制器的URL助手設置默認名稱空間,以便從繼承自BackendController的控制器調用respond_with @event會自動採用正確的命名空間?

+0

嚴格地說,默認名稱空間是全局名稱空間,並且沒有選項可以更改它。您可能希望將後端名稱空間移到全局中,或者設置您自己的助手來支持您想要的行爲。儘管如此,抵制違約是件痛苦的事情。 – prusswan

回答

0

您可以在您的路線文件中使用scope module: :backend而不是namespace :backend

如果您希望模塊名稱出現在URL中,您也可以在範圍中添加:path選項。

考慮以下路線文件:

Rails.application.routes.draw do 

    scope module: 'backend1' do 
    resources :event1 
    end 

    scope module: 'backend2', path: 'backend3' do 
    resources :event2 
    end 

    namespace 'backend3' do 
    resources :event3 
    end 

end 

這將產生以下途徑:

   Prefix Verb URI Pattern       Controller#Action 
     event1_index GET /event1(.:format)     backend1/event1#index 
         POST /event1(.:format)     backend1/event1#create 
      new_event1 GET /event1/new(.:format)    backend1/event1#new 
      edit_event1 GET /event1/:id/edit(.:format)   backend1/event1#edit 
       event1 GET /event1/:id(.:format)    backend1/event1#show 
         PATCH /event1/:id(.:format)    backend1/event1#update 
         PUT /event1/:id(.:format)    backend1/event1#update 
         DELETE /event1/:id(.:format)    backend1/event1#destroy 
     event2_index GET /backend3/event2(.:format)   backend2/event2#index 
         POST /backend3/event2(.:format)   backend2/event2#create 
      new_event2 GET /backend3/event2/new(.:format)  backend2/event2#new 
      edit_event2 GET /backend3/event2/:id/edit(.:format) backend2/event2#edit 
       event2 GET /backend3/event2/:id(.:format)  backend2/event2#show 
         PATCH /backend3/event2/:id(.:format)  backend2/event2#update 
         PUT /backend3/event2/:id(.:format)  backend2/event2#update 
         DELETE /backend3/event2/:id(.:format)  backend2/event2#destroy 
backend3_event3_index GET /backend3/event3(.:format)   backend3/event3#index 
         POST /backend3/event3(.:format)   backend3/event3#create 
    new_backend3_event3 GET /backend3/event3/new(.:format)  backend3/event3#new 
edit_backend3_event3 GET /backend3/event3/:id/edit(.:format) backend3/event3#edit 
     backend3_event3 GET /backend3/event3/:id(.:format)  backend3/event3#show 
         PATCH /backend3/event3/:id(.:format)  backend3/event3#update 
         PUT /backend3/event3/:id(.:format)  backend3/event3#update 
         DELETE /backend3/event3/:id(.:format)  backend3/event3#destroy 

希望幫助!

+0

另請參閱[Rails路由從外部](guides.rubyonrails.org/routing.html#prefixing-the-named-route-helpers)Rails指南。 – Raffael

+0

'namespace'foo''只是 '範圍模塊的簡寫:'foo',路徑:'foo',如:'foo'' – Raffael

+0

恐怕你誤解了這個問題。這不是關於定義路由,而是關於URL助手中的使用。另外,你可以方便地使用不同的資源;)只用三次'resources:events'試試你的路由文件,你會明白爲什麼它不起作用。 – janfoeh

相關問題