这是可能的,但你会做很多(可能)不必要的与 Rails 方式的斗争。我认为你会想要一个控制器,因为可能有相当多的共享逻辑(例如保存、删除、创建等)。
要回答您的问题(因为我讨厌人们留下建议而不是答案),那么您需要创建一个扩展路由的模块,这将允许您进行自定义匹配。从那里,您可以进行适当的检查和路由。 这是一个例子。
也就是说,更好的方法(不是双关语)是拥有一个控制器,它具有可以选择视图的集中方法。
def find_view view_name
"#{view_name}#{@user.type}"
end
因此,对渲染 find_view('new') 的调用将尝试渲染名为“new-type1”的视图。您可以将所有 type1 用户特定逻辑放在该视图中。用户类型 2 相同。
同样,由于我认为您的用户代码中会有很多重叠,您可能希望将此 find_view 方法推送到帮助程序类,以便您可以从视图中调用它,并根据用户类型执行诸如渲染特定部分的事情. 这将允许更多的代码重用,这绝不是一件坏事。
一旦你开始考虑拥有一个控制器,有许多简单的方法可以将特定于用户类型的代码推送到不同的途径——上面解释的视图方法,你可以将所有相关代码推送到单独的助手它们是根据用户类型动态调用的,我相信还有更多(可能更好)。但是所有这些都有一个主要的共同点——如果你屈服于让 Rails 使用一条路线、一个控制器,你将减少与 Rails 的斗争,并且你将减少重复的代码。
祝你好运,希望有帮助。