路线出错

时间:2014-09-03 20:15:07

标签: ruby-on-rails routes

我在get

中有两个routes.rb方法
get 'orders/:id-:phone', to: 'orders#show', as: :order_phone
get ':id/:url', to: 'point_pages#show', as: :page_url

因此,对于Order型号,我需要包含以下网址:domain.com/orders/1-88888888888(88888888888 - 电话号码为order.user)和PointPage型号 - {{1 }}

但是当我创建新的domain.com/1/some_long_point_page_url和rails Order时,我收到错误:

redirect to order_phone_path(@order)

所以,我需要告诉我们,当网址为Couldn't find PointPage with id=orders 时,它会使用第一个domain.com/orders/...方法get,当网址为Order时(或其他网址)数字)它使用domain.com/1-...的第二个get方法。

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

这可能看起来有些偶然,但它绝对是保持您的应用程序路线的最佳方式。

我知道你有答案,所以希望这会让你更好地理解你如何从如上构建路线中受益