2010-07-07 56 views
1

我有一個非常簡單的Rails 3應用程序,它具有由Devise和Notes模型運行的用戶模型。眼下URL和路由看起來是這樣的:在url中沒有控制器名稱的嵌套資源

# url 
/users/MEMBERNAME/notes/TITLE-OF-NOTE 

# routing 
resources :users do 
    resources :notes 
end 

但我想的URL看起來像這樣,怎麼會路由看起來像在這種情況下?

# url 
/MEMBERNAME/TITLE-OF-NOTE 

更新:

謝謝,現在我雖然發現了一個新的問題。在我的形式我有這樣的代碼:

<%= form_for([@user, @note]) do |f| %> 

,並在我的控制器我重定向這樣的:

format.html { redirect_to([@user, @note], :notice => 'Note was successfully created.') } 

在這兩種這些情況下,當我使用@user,@note舊網址仍然存在。你知道如何翻譯表單和重定向來使用成員/標題結構嗎?

在此先感謝!

回答

5

你可以在這裏使用自定義路線:

get "/:user_id/:id", :to => "notes#show", :as => :short_user_note 

希望這有助於!

更新:

要使用新創建的名爲路線:

# => /USER_NAME/NOTE_NAME 
redirect_to short_user_note_path(@user, @note) 

# => /user/USER_NAME/note/NOTE_NAME 
redirect_to user_note_path(@user, @note) 
# OR 
redirect_to url_for([@user, @note]) 
# OR 
redirect_to [@user, @note] 

所以,一般的規則是,如果你通過active_record對象數組像下面#redirect_to,#url_for或#form_for方法,#polymorphic_url方法在內部調用,並生成標準的RESTful路由。

+0

感謝您的回答。我已經更新了我的問題。 – Alfred 2010-07-07 16:21:33

+0

我更新了答案,希望它有幫助 – 2010-07-08 12:18:27

+0

謝謝,幫了我很多! – 2015-07-16 13:07:30

5

可以路由的行爲與你在Rails 3的與類似下面的工作路線傭工之後是:

resources :users, :path => '' 
resources :users, :path => '', :only => [] do 
    resources :notes, :path => '', :except => [:index] 
end 

見我blog post關於我如何到達這個解決方案的詳細信息。

相關問題