路线得到错误
问题描述:
我在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
方法。
谢谢!
答
如果你真的要使用路由因此然后交换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
答
你可能要做到以下几点:
#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
这可能看起来有点偶然,但它绝对让你的应用的路由作为公约将直接最好的方式。
我知道你有答案,所以希望这会给你一些更深入的了解,你可以从结构化路线如上
是的,它解决了问题中获益。对于搜索引擎优化的目的,我不需要任何其他字符串在URI中的PointPage。谢谢! – 2014-09-03 20:34:13