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" }
我有 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" }