Rails:如果我通过控制器进行动态路由,这是不好的做法吗?

时间:2014-09-17 16:57:53

标签: ruby-on-rails ruby-on-rails-4 rails-routing rails-authorization

这是我的工作,我觉得这不是一个好主意,而且是反模式:

经过身份验证的用户可以根据用户状态定向到家庭控制器和控制器,并将其定向到不同的路由。 如果我这样做是不好的:

if user.status == "accepted"
   redirect_to ### some view
else
  redirect_to ### another view
end

我考虑过使用CanCan,但我认为这可能有点矫枉过正

1 个答案:

答案 0 :(得分:1)

取决于案件的。这可能是可以接受的。我不能提出建议,因为这会表达意见,但是,我可以给你一个替代方案,因为你显然对如何以不同的方式做这件事感兴趣。

使用Sorcery authentication gem时(据我所知,Devise提供了相同的方法),将过滤器应用于控制器,将任何未登录的用户重定向到页面你指定(重定向到登录页面是明智的。)

这是使用before_filter实现的(实际上与before_action相同)。输入的方法被构建到一个链中,该链在每个控制器的动作上被调用(除非参数另有说明)。如果任何过滤方法redirectrender s,则链序执行停止。这可以在服务器的日志中看到。

如果您需要将相同条件并重定向应用于多项操作,则此方法非常有效。如果情况并非如此,并且它是您进行此项检查的唯一地点,那么您当前的实施可能就足够了。