2009-11-30 121 views
0

這是我的config/routes.rb中文件的摘錄:命名空間資源

resources :accounts do |account| 

     account.resource :profile, :except => [:new, :create, :destroy] 

     account.resources :posts, 
         :collection => { :fragment => :get }, 
         :has_many => [:comments, :likes] 

     # even more code 

end 

我想每一個嵌套的資源從加載從帳戶命名空間,例如帳戶:: PostsController代替PostsController

使用資源:accounts, :namespace => 'account'會嘗試加載AccountPostsController。

試圖窩結構並未真正發揮那麼好:

map.namespace :account do |account| 
.. 
end 

上面的代碼將我想要的位置加載文件,但它的命名空間添加到URL和生成路徑,所以我會有方法,如account_account_posts_url和類似的路徑。

另一種方法是使用類似:

account.resource :profile, :controller => 'account/profile' 

我真的不喜歡這個,因爲它同時涉及重複代碼,並迫使我刪除一些軌道魔法助手。

有什麼想法和建議嗎?

+0

請參閱我的更新以瞭解應該發揮的作用。 – 2009-12-01 15:35:43

回答

1

這樣的事情呢?

map.resources :accounts do |accounts| 
    accounts.with_options(:namespace => "account") do |account| 
    account.resource :profile, :except => [:new, :create, :destroy] 
    ... 
    end 
end 

我還沒有嘗試過,所以不知道它是否可以工作,但這是一個開始。請參閱Rails Routing瞭解更多關於Rails路由可以做什麼的詳細信息和選項。

向下表決後

所以我進行了一些測試。改變我routes.rb和運行rake routes,並想出了以下(非常接近我不得不開始):

map.resources :accounts do |accounts| 
    accounts.namespace :account do |account| 
    account.resource :profile, :except => [:new, :create, :destroy] 
    end 
end 

這得到你想要的東西。正確的網址並指向account/...控制器。

+0

非常感謝。我不知道是誰模仿你,但你肯定會得到我的+1。 – vise 2009-12-01 17:27:51

+0

不用擔心。很高興你有你需要的路線定義。因爲「我沒有試過這個,所以不知道它是否會奏效」,這個下降標記更可能。 – 2009-12-01 18:04:06

0

那麼命名空間有什麼特別的錯誤?我認爲這是你想要做什麼:

map.namespace :account do |account| 
    account.resource :profile 
end 

這將嘗試應用程序/控制器/帳號/ profiles_controller.rb加載控制器,並且將生成路線如account_profile_path

更新基於評論

map.resources :accounts do |account| 
account.resource :profile 
end 

會給你/應收/ 22/profile文件

+0

謝謝你的回覆。對不起,不清楚,但我後面是一個看起來像這樣的路線: /accounts/22/profile 上述代碼將生成帳戶/配置文件。 – vise 2009-12-01 10:53:24