Rails 中的动态路由

Dynamic routing in Rails

我有 3 个不同的 model/controllers。我试着做类似

的东西
// routes.rb
get ':type' => ':type#show'

但正如预期的那样,它没有用。我想根据 URL 中指定的类型路由到控制器。如何实现?

你可以创建一个通用控制器并在那里使用 redirect_to 来读取 params[:type] 并相应地重定向,但我不明白为什么你不能首先使用正确的路由,例如.

get '/some_path/:id', to: 'mycontroller#method'

如果它们是标准的 CRUD 控制器,您需要考虑使用资源类型路由。

听起来您想要使用 rails 可选分段键。 Rails 3 引入了这种语法来定义 URL 模式的可选部分。尝试类似的东西:

match ':controller(/:show(/:id))', via: 'get'

将此路由放在路由文件的最后,因为它将充当应用程序中几乎所有路由的包罗万象。在击中这个之前没有得到匹配。您可以通过指定三个不同控制器可能共享的特定操作等使其更具体。

您可以使用约束

#routes.rb
get "/type" => "controller_A#show", 
  :constraints => lambda { |request| request.params[:type] == "A" }

get "/type" => "controller_B#show", 
  :constraints => lambda { |request| request.params[:type] == "B" }

get "/type" => "controller_C#show", 
  :constraints => lambda { |request| request.params[:type] == "C" }