[英]Rails can't match the existed route
首先,我耙路線檢查所有路線,並確保它存在於我的應用程序中。
在我的route.rb
resources :user do
resource :account
resource :addresses
end
現在到目前為止一切都很好。 我有一些路徑助手方法。 如
user_addresses_path
這個輔助方法在任何地方都可以正常工作(我的意思是它適用於每個視圖模板),除了一個地方。 它無法在我的用戶的視圖模板下工作。 我會告訴你打擊。
#it works here.
#this file is under app/view/address
<%= user_addresses_path(@user) %>
#it doesn't work here.
#this file is under app/view/user
<%= user_addresses_path(@user) %>
為方便起見,我不會在這里粘貼所有代碼。
但如果你明白我的意思,你知道,告訴我為什么會這樣。
如果您想要更多細節,請添加評論。
我認為問題在於您將地址路由定義為用戶的嵌套路由。 具體來說,在rails文檔中指出:
傳遞記錄(如Active Record或Active Resource)而不是Hash作為options參數將觸發該記錄的命名路由。 查找將在類的名稱上進行。 因此,傳遞Workshop對象將嘗試使用workshop_path路由。 如果你有一個嵌套的路由,比如admin_workshop_path你必須明確地調用它(url_for不可能猜出那條路線)。
換句話說,因為被引用的路由被定義為嵌套路由,所以rails無法猜測路由。 由於地址嵌套在用戶內部,因此它可以在特定地址上猜測用戶,但在用戶級別時可以猜測地址。
此外,您所擁有的是“一對多”用戶與地址的關系嗎? 如果是這種情況,那么您的resource
可能需要是路由文件中的resources
(復數)。
resources :user do
resource :addresses
end
給你:
user_addresses POST /user/:user_id/addresses(.:format) {:action=>"create", :controller=>"addresses"}
new_user_addresses GET /user/:user_id/addresses/new(.:format) {:action=>"new", :controller=>"addresses"}
edit_user_addresses GET /user/:user_id/addresses/edit(.:format) {:action=>"edit", :controller=>"addresses"}
GET /user/:user_id/addresses(.:format) {:action=>"show", :controller=>"addresses"}
PUT /user/:user_id/addresses(.:format) {:action=>"update", :controller=>"addresses"}
DELETE /user/:user_id/addresses(.:format) {:action=>"destroy", :controller=>"addresses"}
但,
resources :user do
resources :addresses
end
給你:
POST /user/:user_id/addresses(.:format) {:action=>"create", :controller=>"addresses"}
new_user_address GET /user/:user_id/addresses/new(.:format) {:action=>"new", :controller=>"addresses"}
edit_user_address GET /user/:user_id/addresses/:id/edit(.:format) {:action=>"edit", :controller=>"addresses"}
user_address GET /user/:user_id/addresses/:id(.:format) {:action=>"show", :controller=>"addresses"}
PUT /user/:user_id/addresses/:id(.:format) {:action=>"update", :controller=>"addresses"}
DELETE /user/:user_id/addresses/:id(.:format) {:action=>"destroy", :controller=>"addresses"}
請注意,第二個選項(復數)為您提供了能夠為每個用戶尋址多個地址的路由,而單數路由只為您提供一個地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.