如何在Ruby on Rails中创建向导表单

18

我正试图了解在Ruby on Rails中实现向导表单的最佳选项。理想情况下,我希望应用程序注册有一个后退和下一步按钮,允许用户逐步提交数据。

因此,在第1步中,他们可以填写联系信息。完成后,他们可以点击下一步并进入第2步以填写付款信息等。如果他们犯了错误,可以点击返回并更正。某些步骤是必需的,而其他步骤则不是,但您必须到达最后一步才能将数据提交到数据库进行注册。然后,他们需要能够以同样的方式返回并填写以前的步骤(例如:也许如果他们点击了个人资料链接,他们可以以同样的方式重新完成步骤,因为他们不想立即完成所有步骤。也许在完成注册之前给他们一个跳过按钮?)。我还需要验证已完成的步骤,防止他们在进行更正或完成之前进入下一步。

选项1)我注意到在stackoverflow上的其他问题中推荐使用ajax作为选项。我唯一的问题是如果JavaScript被禁用,用户将无法注册。理想情况下,我希望它是原生于Ruby on Rails,但我愿意与任何必要的工具合作使其正常工作。

5个回答

16

谢谢你的推荐。我其实经常看Ryan的直播,也自己发现了这个。不过还是谢谢你。 - Branden Silva

15

有几个插件可以在Rails中提供向导式的构建辅助。
Acts as WizardWizardly似乎是最受欢迎的。
主要思想是:
* 在第一步创建模型
* 然后在随后的步骤中进行编辑,
* 每个步骤应用部分验证,并且
* 使模型实现某种状态机制。


1
谢谢,我一定会尝试这些的。 - Branden Silva
我不知道,也许可以尝试移植一个,这应该不难,或者自己编写一个,这种技术相对来说比较简单。 - clyfe
1
我有这样的印象,即宝石还没有移植到Rails 3,因为jQuery可以完成相同的事情。 - ZMorek
为什么模型应该知道它是如何填充的(我的意思是内置FSM)? - Andrei Dziahel
@develop7 你可以分离关注点,但由于验证在模型层,你可能需要付出两倍的努力,却几乎没有任何好处。 - clyfe
显示剩余2条评论

6

5

3
一种替代方法,特别是对于更简单的多步骤表单,是根据步骤仅显示/隐藏单个表单的部分,这样您就不必在每个步骤上访问数据库,而是让用户构建他的对象直到准备好一个有效实例。
这种方法强烈建议使用表单类而不是直接使用模型(参见http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/),并且需要微调错误消息呈现。
优点:只有一个数据库访问、无需处理不合法的实例(非空列、before_save 检查损坏的属性)、不用担心回调地狱问题。
缺点:发送给用户的 html 更多、错误消息微调、需要一个良好构建的表单类才能优雅且真正有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接