2012-03-18 29 views
2

我有一個毛茸茸的路由集合我是從梁2升級到Rails的3.在Rails 2,路由寫入文件,像這樣:Rails路由,作爲選項也改變參數哈希...如何覆蓋呢?

map.resources :stories, :path_prefix => ':user_id', :name_prefix => 'user_', :controller => :user_stories, :do |story| 
    story.resources :article_clips 
end 

和產生這個路由集合:

  user_story_article_clips GET /:user_id/stories/:story_id/article_clips(.:format)     {:controller=>"article_clips", :action=>"index"} 
            POST /:user_id/stories/:story_id/article_clips(.:format)     {:controller=>"article_clips", :action=>"create"} 
     new_user_story_article_clip GET /:user_id/stories/:story_id/article_clips/new(.:format)    {:controller=>"article_clips", :action=>"new"} 
     edit_user_story_article_clip GET /:user_id/stories/:story_id/article_clips/:id/edit(.:format)   {:controller=>"article_clips", :action=>"edit"} 
      user_story_article_clip GET /:user_id/stories/:story_id/article_clips/:id(.:format)    {:controller=>"article_clips", :action=>"show"} 
            PUT /:user_id/stories/:story_id/article_clips/:id(.:format)    {:controller=>"article_clips", :action=>"update"} 
            DELETE /:user_id/stories/:story_id/article_clips/:id(.:format)    {:controller=>"article_clips", :action=>"destroy"} 

注意URL示例如何包含':story_id' - 也就是說,name_prefix沒有影響params散列中'story_id'的名稱(即,您可以通過' params [:story_id]'...

所以我設法翻譯t他取得了一些成功,這是我到目前爲止有:

scope ":user_id" do 
    resources :stories, :as => 'user_story', :controller => :user_stories do 
    resources :article_clips 
    end 
end 

這一切都很好,除非使用「:爲」,請注意如何將越來越投入params哈希表已重命名爲「對象:user_story_id 「:

  user_story_article_clips GET /:user_id/stories/:user_story_id/article_clips(.:format)    {:action=>"index", :controller=>"article_clips"} 
            POST /:user_id/stories/:user_story_id/article_clips(.:format)    {:action=>"create", :controller=>"article_clips"} 
     new_user_story_article_clip GET /:user_id/stories/:user_story_id/article_clips/new(.:format)   {:action=>"new", :controller=>"article_clips"} 
     edit_user_story_article_clip GET /:user_id/stories/:user_story_id/article_clips/:id/edit(.:format) {:action=>"edit", :controller=>"article_clips"} 
      user_story_article_clip GET /:user_id/stories/:user_story_id/article_clips/:id(.:format)   {:action=>"show", :controller=>"article_clips"} 
            PUT /:user_id/stories/:user_story_id/article_clips/:id(.:format)   {:action=>"update", :controller=>"article_clips"} 
            DELETE /:user_id/stories/:user_story_id/article_clips/:id(.:format)   {:action=>"destroy", :controller=>"article_clips"} 

我已經嘗試了很多不同的東西,‘:name_prefix’沒有在所有的工作,那就是:串流中刪除'的事也行不通了。我怎樣才能做到這一點?我需要用'match'語句手動寫出這些路線嗎?

非常感謝您的幫助。

回答

2

我結束了手寫的路線了,就像這樣:

match '/:user_id/stories/:story_id/article_clips(.:format)'   => 'article_clips#index', :via => :get, :as => :user_story_article_clips 
match '/:user_id/stories/:story_id/article_clips(.:format)'   => 'article_clips#create', :via => :post 
match '/:user_id/stories/:story_id/article_clips/new(.:format)'  => 'article_clips#new',  :via => :get, :as => :new_user_story_article_clip 
match '/:user_id/stories/:story_id/article_clips/:id/edit(.:format)' => 'article_clips#edit', :via => :get, :as => :edit_user_story_article_clip 
match '/:user_id/stories/:story_id/article_clips/:id(.:format)'  => 'article_clips#show', :via => :get, :as => :user_story_article_clip 
match '/:user_id/stories/:story_id/article_clips/:id(.:format)'  => 'article_clips#update', :via => :put 
match '/:user_id/stories/:story_id/article_clips/:id(.:format)'  => 'article_clips#destroy', :via => :delete 

這是不愉快的,但它的工作對我的需要。整個應用程序使用'user_'name_prefix的視圖助手(我grep 84個地方),所以我需要保留這一點。但用':user_story'參數 - 它打破了路線,'故事'找不到。

對不起,如果我對問題的解釋不是很清楚。如果有人知道一個更好的解決方案(如果'Rails 3'中的'name_prefix'選項在Rails 3中工作,那麼我認爲這將是實現它的方法......) - 例如,這用於工作,但現在不需要:

scope ":user_id" do 
    resources :stories, :name_prefix => 'user_', :controller => :user_stories do 
    resources :article_clips 
    end 
end