前言
我正在 Rails 中开发纸牌游戏服务器。该应用程序通过模型实例树记录玩家应该做什么PendingAction
。
class Player < ActiveRecord::Base
has_many :cards
has_many :pending_actions
end
在任何时候,玩家都需要对任何叶子PendingAction
s 进行操作——可能不止一个,例如:
1. End turn
|
+- 2. Do thing A
| |
| + 3. Do thing pre-A
|
+- 4. Do thing B
|
+ 5. Do thing pre-B
视图代码向玩家展示一个或多个表单,请求他们对每个叶子动作进行选择。例如,在上述情况下,将呈现表单以征求行动 3 和 5 的输入。
当玩家为动作 5 做出选择时,该动作被破坏。然而,处理他们的选择可能会导致他们需要在父母(行动4)发生之前做出另一个选择。像这样:
1. End turn
|
+- 2. Do thing A
| |
| + 3. Do thing pre-A
|
+- 4. Do thing B
|
+ 6. Do other thing pre-B
因此,动作 4 需要在手边,因此可以将动作 6 创建为其子项。目前,我只是将动作 4 作为函数参数传递。但是,我刚刚遇到了这样一种情况,即能够在对象的before_save
挂钩中访问它真的很有帮助Card
。
问题
存储与 a 关联的对象的最佳位置在哪里Player
,我可以从与 that 相关的所有模型中访问该对象Player
,这在整个 HTTP 请求中都有效——但不能超出——单个 HTTP 请求?
我在 Heroku 下运行,有 1 个测功机 - 所以我相信我是单线程的。