2010-07-23 139 views
0

我將以我剛剛接觸RoR的事實爲序。我有一個駐留在嵌套模塊中的類::Physical::Users::User。該代碼被組織到諸如app \ controllers \ physical \ users之類的路徑中。不正確的嵌套模塊路由

我的問題是當我嘗試使用form_for這樣的:

<% form_for @user do |f| %> 
    ... 
<% end %> 

我得到的錯誤ActionView::TemplateError undefined method 'physical_users_users_path'

我明白,這有軌期待不符合我的路線做。爲了使我的應用程序工作,使資源:用戶直接進入正確的目錄(以便我不必使用http:\ myurl.com \ physical \ users \ users \ 1',我將以下內容我的routes.rb文件:

map.resources :users, :controller => 'physical/users/users' 

當我運行「>耙路線」我得到如下:

users GET /users(.:format)     {:controller=>"physical/users/users", :action=>"index"} 
      POST /users(.:format)     {:controller=>"physical/users/users", :action=>"create"} 
new_user GET /users/new(.:format)    {:controller=>"physical/users/users", :action=>"new"} 
edit_user GET /users/:id/edit(.:format)   {:controller=>"physical/users/users", :action=>"edit"} 
    user GET /users/:id(.:format)    {:controller=>"physical/users/users", :action=>"show"} 
      PUT /users/:id(.:format)    {:controller=>"physical/users/users", :action=>"update"} 
      DELETE /users/:id(.:format)    {:controller=>"physical/users/users", :action=>"destroy"} 
       /:controller/:action/:id   
       /:controller/:action/:id(.:format) 

是否有較短的URL保持我的用戶資源,並得到form_for的方式尋找正確的路線?

再次,我是新的,所以如果在這個解釋中有什麼我不知道的話, 讓我知道!

-

響應於下面的答覆時,控制器駐留在應用程序/控制器/物理/用戶/ users_controller.rb。

更改路由使用像命名空間:

map.namespace :physical do |physical| 
    physical.namespace :users do |users| 
    users.resources :users 
    end 
end 

產生是什麼form_for正在尋找一致的路線,但後來我失去了使用URL http能力:\ mysite.com \用戶\ 1。

感謝您的幫助!

+0

你能解釋你的控制器被命名的原因:controller =>「physical/users/users」? - 通常它只是「用戶」 – 2010-07-23 01:26:04

+0

另外 - 什麼是您的users_controller文件的完整路徑?是/app/controllers/physical/users_controller.rb?或者它是/app/controllers/physical/users/users_controller.rb? – 2010-07-23 12:48:10

+0

我正在關注Dan Chak的[Enterprise Rails](http://oreilly.com/catalog/9780596515201)。物理層指示與物理數據庫模型交互的類,而邏輯層中的類則處理構建在業務邏輯之上的類等。 – 2010-07-23 13:02:22

回答

0

我找到工作其實答案傑西Wolgamott和sespindola的回答的組合。我已經把它們都投了票。我放在我的routes.rb文件中的以下內容:

map.namespace :physical do |physical| 
    physical.namespace :users do |users| 
    users.resources :users 
    end 
end 

map.resources :users, :controller => "physical/users/users" 

如果這似乎缺憾,並沒有真正做到這一點的最好辦法,發表評論。感謝所有的幫助!

+0

你不應該同時需要users.resource:users和map.resources:用戶 - 你的路由文件中只有一個應該存在。我建議你避開復雜的方案,並保持簡單。如果你有一個控制器資源(作爲你係統中的頭等公民),只需要一個map.resources:用戶。 – 2010-07-25 22:56:47

1

在路線,你必須代表模塊,命名空間:

namespace :physical do 
    namespace :users do 
    map.resources :users 
    end 
end 
+0

我試過這個,腳本/服務器抱怨。你的意思是: map.namespace:physical do | physical | physical.namespace:用戶do | users | users.resources:users end end 這樣做的意義在於它創建了正確的路徑,但是我將如何確保path/users /:id轉到physical/users/users_controller? – 2010-07-23 13:11:56

1

同意@sespindola,但在應用程序\控制器,該控制器\身體\用戶---我認爲這是一個命名空間問題

我想這可能爲你工作:

map.resources :users, :path_prefix => ':physical' 
+0

如果是這樣,你的答案是正確的。 我以爲他有應用程序/控制器/物理/用戶/用戶的控制器。 – sespindola 2010-07-23 03:00:22

+0

對!我會讓他確認 – 2010-07-23 12:40:18