动态Rails路线在运行时

时间:2019-05-22 13:39:48

标签: ruby-on-rails

我有一个具有两种类型的用户的应用程序-员工和客户,客户下达员工处理的订单。

对于每种类型的用户,我都有一个单独的控制器OrdersController,该控制器提供各种操作和不同类型的视图。

我希望能够在共享部分中执行redirect_to order_path(@order),以便根据用户类型来访问正确的控制器。

例如:order_path(Order)对于员工应翻译为/employees/orders/ID,对于客户应翻译为/clients/orders/ID

最好不要使用诸如“调度控制器”之类的骇客,它们会根据用户类型或为每种类型的用户对Orders进行子分类来发布进一步的重定向。

如何为此设置路由?

1 个答案:

答案 0 :(得分:1)

这不是“动态路由”的真正工作,路由表在设计上是静态的。

相反,您可以定义自己的帮助程序方法来查看当前用户类型,并调用正确的路由帮助程序。

例如:

# app/helpers/application_helper.rb

def order_path(order)
  if current_user.is_a? Employee
    employee_order_path(order)
  else
    user_order_path(order)
  end
end