Rails 如果某一个 Controller 下的动作实在太多,用什么方式可以分离呢。

dreamrise · 2012年05月13日 · 最后由 ch3n 回复于 2012年05月14日 · 3558 次阅读

比如对于一张订单,

很多作业都是对这张订单来进行操作的,不可避免,有很多 action 会建立在这个订单 CONTROLLER 的上面。

有什么方式可以分流掉一些 action 吗?

  1. controller 的代码写到 model 中去
  2. 利用 activerecord 的 callback
匿名 #2 2012年05月13日

把资源的粒度切小一点的,肯定有办法的

可能有些未必是 orders controller 的逻辑,也许属于 payments controller,另外 model 和 controller 未必得是一一对应的。电子商务订单流程处理参考一下 spree 我觉得挺好。

每一步都分开

可以按照业务逻辑拆开,比如,下订单,用户查看订单,管理员处理订单,用户编辑订单,各自一个 controller

#6 楼 @ch3n 能举个例子吗?还没有试过不对应 model 的 controller。这应该是个好主意。

所谓 ROA 这个 R 是可以更抽象的,并不是说一个 model 和 controller 是一一对应的关系;将你的操作抽象成另一种资源。比如常见的用户登陆与登出,就被抽象成了 session 这样一种资源的创建与销毁,sns 里面常用的用户之间的 follow 动作可抽象成一种 relationship 的创建和销毁,等等。。。

用多层的 routes,比如 orders/1/line_items/2 这样的,把订单的功能分成几块。

最简单的方式是把一个 action 拆开,变为多个 private 的 action,然后依次当成一个函数来调用 尽可能的把逻辑的东西写到 Model 里面

action 过多明显是 REST 实施的不彻底嘛

#7 楼 @dreamrise model 和 controller 没什么必然关系,不需要名字对应。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号