我在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
方法。
谢谢!
答案 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
这可能看起来有些偶然,但它绝对是保持您的应用程序路线的最佳方式。
我知道你有答案,所以希望这会让你更好地理解你如何从如上构建路线中受益