将行为分成两个控制器,这两个控制器作用于单个模型

时间:2012-01-29 23:39:50

标签: ruby-on-rails cancan

我有预订模式,我的学生角色的用户可以在线创建预订。 我已为具有讲师角色的用户添加了离线创建预留的功能。

控制器操作 new create 对于这两个流程完全不同。关联的视图模板也有许多不同之处。

我曾考虑在控制器和视图中使用if role ==讲师检查以允许我用单个控制器覆盖两个流。但我真的不喜欢这种方法。


因此,我为offline_reservations创建了一个单独的控制器和模板。 这工作正常,但我在使用CanCan来控制对它的访问时遇到了问题,因为两个控制器都使用相同的预留模型。

我做了另一个更改,我将新控制器移​​动到命名空间, 所以它现在位于

/offline/reservations/new 

而不是

/offline_reservations/new

但我不确定这是否有所改善。

有人可以建议处理这种情况的最佳方法是什么?

  1. 我对单个模型有两组不同的行为。我如何将它们分开。我真的不希望它们都在一个控制器中,但如果那是最好的那么就是它。

  2. 由于只有一个模型,我需要让CanCan允许我限制对每种类型控制器的访问,但我发现很难,因为它们都使用相同的模型

  3. 在这种情况下,命名空间控制器的用户是好还是坏..

1 个答案:

答案 0 :(得分:0)

这似乎是我的问题的答案。

https://github.com/ryanb/cancan/wiki/Admin-Namespace