我正在嘗試創建一個嵌套的資源,其URL方案沿着「http://example.com/username/...
」這一行。路徑根級別的嵌套資源
我現在有是這樣的:
ActionController::Routing::Routes.draw do |map|
map.home '/', :controller => 'home'
map.resource :session
map.resources :users, :has_many => :nodes
#map.user '/:id', :controller => 'users', :action => 'show', :has_many => :nodes
map.resources :nodes, :belongs_to => :user
end
這導致網址,如:
http://example.local/users/username
http://example.local/users/username/nodes
如何避免 「用戶」 的前綴是超越我。將「as: => ''
」選項傳遞到map.resources
不起作用,似乎命名路由不支持「:has_many
」或「:belongs_to
」選項。
註釋掉「map.resources :users
」,並在其似乎正常工作之後取消註釋「map.user
」行......直到您到達嵌套資源。然後,它吐出以下錯誤:「你爲什麼要這麼做」
undefined method `user_nodes_path' for #<ActionView::Base:0x1052c8d18>
我知道這個問題已經提出了很多之前倍,總是會見響應。坦率地說,Twitter做到了,Facebook做到了,我也想做! ; -D
至於對如何避免衝突的內置路徑的用戶名的常見批評,我已將我的最小用戶名長度設置爲6個字符,並計劃使所有內置的根級路徑段路徑5字符或更短(即「/opt/...
」用於選項,「/in/...
」用於會話登錄等)。
太棒了!我很驚訝我之前沒有找到default_routing插件;它看起來像任何項目必須具備的!謝謝你的幫助! – 2009-09-25 06:06:31
我應該提到,雖然default_routing插件非常棒,但它在Rails 2.3.4(以及可能更早的版本)中也非常糟糕。 然而,在http://github.com/slippyd/default_routing有一個固定的版本。 – 2009-09-26 08:46:37
感謝您的鏈接,Slippy,您的版本爲我完美工作! – 2009-10-01 22:12:16