什么是Rails处理“多控制器动作”的方式?在我的应用程序中,我有一个特殊的“购物车”流程,它对几个模型有影响。基本上,当他/她登录时特定种类的用户可以使用流程,并且如下所示:Rails多控制器动作
- 添加用户。
- 这里可以“添加用户”。如果您了解Basecamp,这一步有点像将人添加到项目中。所以在这一步,我正在考虑用户资源。
- 这里可以为每个以前添加的用户“购买”东西。
- 这就像一个基本的购物车。所以,就资源而言,我正在考虑“商店”或“购物车”。
- 这是确认步骤。我再次想到这是购物车的一部分。
确认后,应该发生几件事。
- 步骤1中添加的用户应该以某种方式被激活。也就是说,在激活之前他们将无法登录。
- 应在步骤2中购买订单。
- 在步骤2中购买的“材料”是某种虚拟产品。也就是说,产品在用户登录时显示为“邀请”。这些细节并不太重要,有点难以解释。关键是,确认后,应在数据库中创建与用户关联的邀请。
此外,系统的细节有点难以解释,但我的主要问题是如何在Rails中最好地实现这种类型的东西。涉及多个步骤,并影响所有步骤中的几个模型。
我一直在想着用某种状态机来做这件事。然后,状态机将负责在这些步骤或状态之间转换,并执行所需的操作。所以我想我会有一个StateMachineController或其他东西,没有模型,将实现主要逻辑。这是可以使用的吗?看来Rails确实偏向于RESTfull资源,但我似乎无法想象上述类似的RESTfull方法。谢谢。
我有一个答案正在进行,但意识到它太模糊不实用。我的一般回应是你应该保留你的模型中的状态信息,并且在那里确定逻辑的状态(无论是状态机还是简单的流程)。这听起来很像我的一个“邀请”过程 - 你“邀请”一个潜在的新用户,并给他们虚拟的东西。但是他们只有在注册并确认之后才能得到这些东西。这种流程在Devise gem中出色地完成了(我认为有一个“invitable”模块)。检查出来的灵感。 –
感谢您的回复。你对邀请系统绝对正确。实际上我使用Railscast#196作为灵感来源,因为我有自己的认证系统,不能/不会使用Devise(不是我认为Devise不错)。我的主要问题仍然是如何处理“控制多个模型”。我需要这样一些内容:在步骤3中按下OK后:下订单,激活用户,发送邀请等等。因此,可能的一些操作(跨越用户,邀请和订单模型)在单个交易中汇总。但是,谢谢。 – Kasper