route.rb中的ROR 3条件

| 有没有一种方法可以在route.rb中指定条件语句-我希望root_path取决于用户是否登录。也许还有其他方法可以做到这一点? 谢谢!     
已邀请:
实际上,我认为您可以使用此处记录的高级约束... 您将定义一个“ 0”来检查用户是否已登录,并使用两条路由(一条在受登录约束时使用,另一条在未登录时使用)。 尽管我不确定执行该自定义约束时会话是否可用。 尽管我同意SpyrosP,但最好在Controller中进行。     
不,你不能那样做。路线不依赖基于模型代码的条件。任何人都可以呼叫一条路线,因此无论如何您都不能依赖它。 相反,只需在要保护的控制器上添加\“ before_filter:authenticate \”(使用会话)。如果有人尝试以管理员身份访问您的管理控制器,他们将被重定向到登录名或您喜欢的任何位置。     
我认为先前的答案(建议在控制器中使用before_filter更合适)略微遗漏了OP的用例。将其作为条件路由/高级约束仍具有优势。它不能代替在控制器中具有before过滤器的功能,以防止未经授权的直接访问。但是,例如,将redirect_to root_path路由直接路由到例如用户登录时的个人资料,或未登录时的首页,将保留Flash消息,否则这些消息会在before过滤器的第二次重定向中丢失。使用高级约束方法更优雅的恕我直言(当然,假设在测试自定义约束时,会话实际上是可用的)。更不用说,在这种类型的实例中,为什么不保存额外的重定向(因为它涉及整个其他HTTP(S)事务)? 更新: 如果您使用的是Devise,本文将介绍一种更好的方法。我自己实施了它,效果很好,而且很干净。 同样,总是对解释不赞成票的评论表示赞赏,不仅是作者,而且是阅读答案的其他人,因此他们知道为什么这可能不是一个合理的回答。     

要回复问题请先登录注册