新手问题 跳转相关的逻辑适合放在 controller 里吗?

karmue · 2013年10月04日 · 最后由 luikore 回复于 2013年10月04日 · 2434 次阅读

比如一个会员登录的功能, 1 如果欠费,跳转到续费页面 2 如果正常,跳转到内容页面 3 如果没注册,跳转到注册页面 4 如果帐号异常,跳转到帐号页面 5 如果...等等

写出来大概就是一个 case statement 类似

case 
when... then redirect_to...
when... then redirect_to...
when... then redirect_to...
when... then redirect_to...
when... then redirect_to...
else
end

这样的一个 controller 并不怎么瘦,但是跳转相关的放在 model 里面也不合适,况且如果要放在 Model 里面还要 include url helper 才能用 path/url helper,显然已经脱离了 model 本来的功能 有没有什么优雅的方法处理这类问题的?

可以放到 app/helpers 中,比如先放到 app/helpers/application_helper.rb 中,然后在通过 refactor 挪到一个合适的地方。

controller 是最合适的地方。

拆成多个 before_filter 放在正常页面前

本来就是 controller 的职责吧, 消灭不掉就算了, 转移到奇怪的地方以后再看会很困惑的...

按 DRY 的原则, 可以把 redirect_to 提出来:

redirect_to\
  case 
  when ... then ...
  when ... then ...
  else
  end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号