在两个Rails之间交替:在控制器操作上的before_filter取决于用户模型

时间:2013-07-26 12:41:35

标签: ruby-on-rails devise

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

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

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

分离控制器和视图的最佳方法。如果你试图为两个有差异的模型(视图元素,能力,过滤器等......)设置一个控制器,你最终会在你的应用程序中分散if-else块。这将使您的代码难以阅读。此外,将来当您必须添加功能时,您将无法添加更多条件块,您的代码将变得更难维护。

分离控制器后,使用通常的RoR策略将代码保持干净状态:

  • 创建一个将包含两个控制器的常用方法的基类
  • 为视图的常见部分创建部分内容
  • 为模型的常用功能创建服务对象
  • 等...

因此,一个常见的before_filter窗台位于您的基类中,并且在您的特定类中具有特定的before_filter。您的代码将极大地提高可读性