如何将可选的URL参数映射到Rails 3"routes.rb"中的params [:something]?

Mis*_*hko 2 routes ruby-on-rails ruby-on-rails-3

我的内容如下config/routes.rb:

match "/assets/:id" => "assets#my_action"
Run Code Online (Sandbox Code Playgroud)

我想改变它以便:

/aasets/id
Run Code Online (Sandbox Code Playgroud)

/aasets/id/download
Run Code Online (Sandbox Code Playgroud)

将被映射到assets#my_action,如果URL结束,/download我将在里面有一个标志my_action(比方说,params[:something]不会nil).

我怎么能这样做?

小智 8

您可以在1行中执行以下操作:下载作为可选参数,例如:

match '/assets/:id(/:download)' => "assets#my_action"

然后在你的控制器中params[:download]可以用来检查URL中id之后的内容,如果有的话.


dee*_*see 6

您可以简单地将两个路由匹配到同一个控制器.

match "/assets/:id" => "assets#my_action"
match "/assets/:id/:downloadparams" => "assets#my_action"
Run Code Online (Sandbox Code Playgroud)

您检查params [:downloadparams]将检查其余部分.

编辑:哦"下载"不会是变量对吗?你可以试试像

match "/assets/:id/:action" => "assets#my_action"
Run Code Online (Sandbox Code Playgroud)

如果不是params[:action] == "download",请检查是否忽略该参数.