2013-03-25 87 views
0

我在測試應用程序中玩Rails 4。我有一個任意的URL,不像resources :foo類型的URL。理想情況下,最終的結果,我想是能夠去:Rails 4中的命名路線4

/contests/:id/enter

在意見,那將是巨大的,如果我可以再使用具名的輔助,例如設置鏈接:

edit_contests_enter(:id)

什麼是最好的方式來定義上面的路由,所以我可以使用像上面那樣的任意URL的助手路徑?它不一定是edit_contests_enter(:id),但只要助手路徑如上所示導致URL,那就太棒了。

回答

3

我假設你的比賽是一個資源,當你的訪問者去/contests/:id/enter你希望他們創建一個對象user <=> contest。我們稱之爲participation

現在participation是完全一樣在你的Rails應用程序的任何其他資源,所以你有一個routes.rb文件看起來像

resources :contests do 
    resources :participations 
end 

你不希望人們做以外的任何其他創建的參與,像編輯或銷燬它們。也許你想要一個很好的URI,如/contests/:id/enter。所有你需要做的就是

resources :contests do 
    resources :participations, :only => [:new, :create] 
    get "enter" => "participations#new" 
end 

做這樣會給你一個名爲contest_enter一個路線幫手。在您的participations#new表格中,您將像往常一樣POST/contests/:id/participations

2

如果您有:contests一個resources塊,你可以使用只定義在ContestsController一個新的「成員」路線:

resources :contests do 
    member do 
    get :enter 
    end 
end 

這將自動爲你生成一個名爲member route,它的名字你可以通過運行rake routes找到。