2012-05-15 19 views
0

我不知道我在做什麼錯。這是我的路線:你如何使用:as和正確匹配路線?

resources :stores do 
    get '/add_shoes' => 'stores#add_shoes', :as => :add_shoes 
end 

我的路徑應該是:<%= link_to "Add Shoes", add_shoes_path %>

但它給該路徑不存在錯誤。我如何使用它們?

+0

不是一個直接的答案,但是你可以使用'rake routes'(你可能需要根據你的設置做'bundle exec rake routes')來查看你的應用知道的所有路由列表。你應該能夠在列表中找到它。 – Emily

+0

在做資源時有沒有區別,因爲有一個單獨的行以匹配開始而不是獲取? – kobaltz

+0

@Emily我確實看了一下路線,然後回來了:'store_add_shoes GET/stores /:store_id/add_shoes(.'。奇怪的路線給我.....當我想只是'/ add_shoes'。 – LearningRoR

回答

2

如果我記得正確,因爲它嵌套在resources塊中,它會在末尾追加stores。所以正確的路由是add_shoes_stores_path。有時它還會在最後添加一個索引(不知道爲什麼),以便爲您提供add_shoes_stores_index_path。

由於這是一個get呼叫,您可以始終將它放在resources區塊之外。

此外,更Rails的方式做這將是:

resources :stores do 
    collection do 
    get :add_shoes 
    end 
end 

你有一大堆的選擇這裏你要如何處理它。但只是一個簡短的提示,您可以在命令行中輸入rake routes以獲取所有可用路由及其指向的列表。

如果您正在尋找這樣做的方式來清晰您的代碼,請記住:您的路線應該始終提及它們指向的位置。那將是add_shoesstores。有一個add_shoes_path可以指向字面上的任何控制器,因爲它不是真的冗長。我肯定會堅持Rails的做法 - 當你深入潛水時,它會更有意義。

最後,另一個想法 - 如果您在商店模型中添加鞋子,每個商店都有鞋子是有道理的。您應該爲Shoes創建一個新模型並使用RESTFUL路由。