Rails'路由'基于模型属性

时间:2011-09-21 21:17:48

标签: ruby-on-rails routing state dry

我正在尝试根据当前经过身份验证的用户的属性在我的应用程序的主页上执行不同的操作。例如:

location, user,  state, -> destination 
/, no user                               -> a home page
/, user authenticated, state: unverified -> user profile page
/, user authenticated, state: verified   -> a content listing

这看起来是我试图根据当前用户的状态(由状态机表示)来“路由”。这3个动作已经存在于3个不同的控制器中(我称之为“页面”,“用户”和“帖子”),但是当一个人可以调用另一个控制器的视图时,人们无法调用另一个控制器的动作,使其变得有点困难不要重复自己。有很多方法可以解决这个问题,但我不确定The Rails Way的用途是什么,所以我想我会问。我认为是我的选择:

  • 在假设的“重定向控制器”中使用redirect_to,但我希望页面显示在/下,所以这不是我想要的。
  • 对路由约束感到满意(不确定这是否可行;路由中需要会话/ cookie,我不确定是这种情况)
  • 将特定操作的逻辑从各自的控制器中拉出,将它们放入ApplicationController中,并根据用户在假设控制器中的状态直接使用它们(或者只是将其丢入页面中)。
  • 在控制器,视图或两者中重复自己
  • 尚未知的选择,我愿意接受建议。

我倾向于第三种选择,明显的缺点是某些控制器现在或多或少地莫名其妙地生活在ApplicationController中(除非,上帝帮助我,我做了一些Lovecraftian包括在扩展)。让这些代码在两个地方生活对我来说很脏。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

使用帮助程序的单个操作是否会根据用户的当前状态选择正确的部分?

另外,请看一下使用ActiveSupport :: Concern而不是让所有Lovecraftian包含在扩展中。 http://api.rubyonrails.org/classes/ActiveSupport/Concern.html