访问URL一般URL参数,而不是:id

问题描述

要处理对/ pizzas / marinara的请求,我可以使用

get '/pizzas/marinara',to: 'pizzas#marinara'

但是,如果有很多不同种类的披萨,则引入相应的变量是有意义的。我知道

get '/pizzas/:id',to: 'pizzas#show'

使ID在paramss控制器的show动作中可作为params [:id]使用。例如,如果有人访问/ pizzas / 3,则params [:id]将产生3。

是否可以使用类似的东西

get '/pizzas/:pizzaname',to: 'pizzas#show'

要在Pizzas控制器的show操作中访问:pizzaname,即作为params [:pizzaname]吗?

(我发现了几个相关的问题,但是它们似乎都与资源有关,而我正试图以更明确的术语来解决这个问题)。

解决方法

使用字符串时,您实际上实际上是在创建一个轨将与传入URL匹配的模式。 :id只是该模式中的dynamic segment,因此您在该细分中使用的任何名称都将映射到参数哈希:

get '/pizzas/:foo(/:bar)(/:baz)',to: 'pizzas#show'

在此路由中,我们添加了两个额外的可选动态段,因此/pizzas/exotic/hawaii/with_extra_pineapple您将获得以下参数哈希值:

{
  "controller"=>"pizzas","action"=>"show","foo"=>"exotic","bar"=>"hawaii","baz"=>"with_extra_pineapple"
}

在使用resources宏时,还可以通过传递param选项来自定义id参数的名称:

resources :pizzas,param: :pizza_name

但是,与常规打破常规时,您确实需要问自己是否只是一个骗子,它是否真正有任何实际目的。我的猜测是,答案是否定的,因为您可以在不更改参数名称的情况下添加“友好的url”。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...