0

如何根据访问相同控制器操作的用户的用户模型在两个过滤器之间交替。

我有两个用户模型 User (:database_authenticatable) 和另一个 LdapUser (:ldap_authenticatable),我需要它们访问同一个控制器并查看应用程序。几种视图元素和能力对于每种类型的用户都是独一无二的。

我打算在视图中使用 if else 块来呈现用户特定的元素,以及替代布局。

这种情况的最佳方法是什么?

他们应该有单独的控制器和视图吗?

提前致谢。

4

1 回答 1

0

最好的方法是将控制器和视图分开。如果您尝试为具有差异的 2 个模型(视图元素、能力、过滤器等)使用一个控制器,您最终会发现 if-else 块分散在您的应用程序中。这将使您的代码难以阅读。同样在将来,当您必须添加功能时,您将无法添加更多条件块,并且您的代码将变得更难维护。

一旦你分离了你的控制器,使用通常的 RoR 策略来保持你的代码 DRY:

  • 创建一个基类,其中包含两个控制器的通用方法
  • 为视图的公共部分创建部分
  • 为模型的通用功能创建服务对象
  • ETC...

因此,一个常见的 before_filter 基类位于您的基类中,而特定的 before_filter 位于您的特定类中。您的代码将大大提高可读性

于 2013-07-26T12:53:40.110 回答