2014-09-03 113 views
0

我在routes.rb路線得到錯誤

get 'orders/:id-:phone', to: 'orders#show', as: :order_phone 
get ':id/:url', to: 'point_pages#show', as: :page_url 

於是兩個get方法,Order模型,我需要有網址,如:domain.com/orders/1-88888888888(88888888888 - 是的order.user電話號碼),併爲PointPage模型 - domain.com/1/some_long_point_page_url

但是,當我創建新Order和軌道redirect to order_phone_path(@order),我收到一個錯誤:

Couldn't find PointPage with id=orders 

所以,我要告訴軌,當URL是domain.com/orders/...,它採用了第一get方法Order,和當URL是domain.com/1-...(或其他數字)時,它使用PointPage的第二個get方法。

謝謝!

回答

1

如果你真的要使用路由因此然後交換get方法的位置調用:

get ':id/:url', to: 'point_pages#show', as: :page_url 
get 'orders/:id-:phone', to: 'orders#show', as: :order_phone 

通過這種方式,第一條路線映入URI。請注意,定義的路線順序非常重要。如果兩條路線匹配給定模式,則使用前面定義的路線。

注意,與這樣的定義:

get ':id/:url', to: 'point_pages#show', as: :page_url 

的所有路由會被它抓到。所以,建議在任何變量之前添加路徑到控制器或一些獨特的文字。 E.g:

get 'point_pages/:id/:url', to: 'point_pages#show', as: :page_url 
+0

是的,它解決了問題中獲益。對於搜索引擎優化的目的,我不需要任何其他字符串在URI中的PointPage。謝謝! – 2014-09-03 20:34:13

0

你可能要做到以下幾點:

#config/routes.rb 
resources :point_pages, only: [], path: "" do 
    get :url, action: :show, as: :page_url # -> domain.com/:id/:url to show 
end 

resources :orders, only: [] do 
    get ":id-:phone", action: :show, on: :collection, as: :order_phone # -> domain.com/orders/:id-:phone 
end 

這可能看起來有點偶然,但它絕對讓你的應用的路由作爲公約將直接最好的方式。

我知道你有答案,所以希望這會給你一些更深入的瞭解,你可以從結構化路線如上