Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带Rails 3的单模型多步骤表单_Ruby On Rails_Forms_Workflow_State Machine - Fatal编程技术网

Ruby on rails 带Rails 3的单模型多步骤表单

Ruby on rails 带Rails 3的单模型多步骤表单,ruby-on-rails,forms,workflow,state-machine,Ruby On Rails,Forms,Workflow,State Machine,我正在尝试使用ActiveRecord持久性实现一个多步骤表单 因此,首先用户提交一个表单,然后创建一个用户 稍后,管理员会审查该用户,并可能1拒绝该用户或2询问更多信息 然后为用户生成另一个表单以提供新信息 等等 它很像一个状态机,但所有可用的gem都没有清晰的文档。另外,我想我依赖于控制器的自定义操作 不知道我的设计是否糟糕,或者是否有正确的方法来做到这一点 谢谢。我不知道这是否正是您想要的,但希望它能为您指明正确的方向 瑞安·贝茨(Ryan Bates)在6月份做了一次铁路调查-我不知道这

我正在尝试使用ActiveRecord持久性实现一个多步骤表单

因此,首先用户提交一个表单,然后创建一个用户

稍后,管理员会审查该用户,并可能1拒绝该用户或2询问更多信息

然后为用户生成另一个表单以提供新信息

等等

它很像一个状态机,但所有可用的gem都没有清晰的文档。另外,我想我依赖于控制器的自定义操作

不知道我的设计是否糟糕,或者是否有正确的方法来做到这一点


谢谢。

我不知道这是否正是您想要的,但希望它能为您指明正确的方向


瑞安·贝茨(Ryan Bates)在6月份做了一次铁路调查-

我不知道这是否正是你想要的,但希望它能为你指明正确的方向


Ryan Bates在6月份做了一次Railscast-

我不知道什么是正确的方法,但在我的项目中,我通过在用户模型中添加一个状态字段来完成。例如:

状态=0-新用户 状态=1-管理员拒绝了该用户 状态=2-管理员询问更多信息 然后,您必须根据状态字段为用户生成正确的表单。您可以在控制器中执行此操作:

def multistep_form
  @user = User.find(params[:id])
  case @user.status
  when 0
    render "form_1"
  when 1
    render "rejected"
  when 2
    render "form_2"
  else
    render "error"
  end
end
或者在视野中的某个地方:

<%= render :partial => "form_{@user.status}" %>
当然,你需要有partials:_form_1、_form_2和_form_3


这只是一个例子,在真正的解决方案中,您还需要保护状态字段不被用户更改,并向状态字段添加一些验证,这样它就只能是0、1和2

我不知道什么是正确的方法,但在我的项目中,我是通过向用户模型添加一个状态字段来实现的。例如:

状态=0-新用户 状态=1-管理员拒绝了该用户 状态=2-管理员询问更多信息 然后,您必须根据状态字段为用户生成正确的表单。您可以在控制器中执行此操作:

def multistep_form
  @user = User.find(params[:id])
  case @user.status
  when 0
    render "form_1"
  when 1
    render "rejected"
  when 2
    render "form_2"
  else
    render "error"
  end
end
或者在视野中的某个地方:

<%= render :partial => "form_{@user.status}" %>
当然,你需要有partials:_form_1、_form_2和_form_3


这只是一个例子,在真正的解决方案中,您还需要保护状态字段不被用户更改,并向状态字段添加一些验证,这样它就只能是0、1和2

> P>如果用户从步骤中开始执行逻辑,则考虑状态机可能更干净。

我一直对你很满意

然后你就可以做像user.approve这样的事情了


并在状态机中分别连接操作,例如发送电子邮件。一旦每一次转换超过1次或两次以上的动作,或者必须添加一个新的转换,它就开始有意义地将模型作为状态机,IMHO。

< P>如果用户在步骤中开始执行逻辑,那么考虑状态机可能会更干净。 我一直对你很满意

然后你就可以做像user.approve这样的事情了


并在状态机中分别连接操作,例如发送电子邮件。一旦每个转换获得超过1或2个操作,或者必须添加一个新的转换,将其建模为状态机IMHO就开始有意义了。

Upvoted。从这个场景中,我看没有理由使用比这个更复杂的东西。此外,可能需要在应用程序控制器中有一个操作来将未接受的用户重定向到此操作。抱歉。这给了我一个方法。谢谢。如果您需要任何其他更详细的帮助,只需询问:很高兴看到并演示model/controller implementation.Upvoted。从这个场景中,我看没有理由使用比这个更复杂的东西。此外,可能需要在应用程序控制器中有一个操作来将未接受的用户重定向到此操作。抱歉。这给了我一个方法。谢谢。如果您需要任何其他更详细的帮助,只需询问:很高兴看到模型/控制器实现的示例。不完全是这样。我需要把所有的步骤都保存到同一个模型中,然后等待管理员的修改来调用下一个步骤。我需要将所有步骤持久化到同一个模型,并等待管理员修订调用下一步。