我正在开发一种让用户逐步完成个人资料的方法,有点像 LinkedIn 和其他人所做的那样。根据他们填写信息的位置,他们将被问及以下问题之一:
- 报名参加跑步
- 添加目标
- 添加头像
- 感谢您完成他们的个人资料
经过一番思考,我想我会使用state_machine gem 来解决这个问题。
我已经将以下内容添加到user
模型中:
state_machine :profile_state, :initial => :needs_to_sign_up_to_a_run, :namespace => 'profile' do
event :signed_up_for_run do
transition :needs_to_sign_up_to_a_run => :needs_goal
end
event :completed_goal do
transition :needs_goal => :needs_avatar
end
event :provided_avatar do
transition :needs_avatar => :complete
end
state :needs_to_sign_up_to_a_run
state :needs_goal
state :needs_avatar
state :complete
end
但是,我不确定这是定义events
or的最佳方式transitions
。
假设用户可以通过多种方式完成目标/头像/注册(即从他们的用户编辑页面,从右侧面板,作为注册流程的一部分)。因此,在实践中,他们可以在目标之前提供化身,因此这completed_goal
是不正确的。
也许我可以使用某种验证来确定状态?也许状态机是完全错误的方法。
我喜欢任何关于解决这个设计问题的建议。