【问题标题】:rails multistep form轨道多步形式
【发布时间】:2011-12-13 20:07:30
【问题描述】:
id 喜欢使用edit 和update 操作使用rails 制作多步表单。所以我希望它像表单的step 1,用户填写他的姓名、地址和电话号码。然后用户点击save and continue,然后他填写他的送货地址,然后点击save and continue并填写他的账单地址。我看到了 ryan bates 的版本,但它不是我想要的。我希望在第一步之后保存订单,所以如果用户没有完成他们的表格,我可以打电话给他们并询问他们出了什么问题。任何人都可以向我推荐一个教程或给我一个如何使用edit 和update 方法制作订单的示例吗?
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
forms
ruby-on-rails-3.1
wizard
【解决方案1】:
通常这意味着您需要在模型验证中设置条件。您的某些验证子集应适用于每个表单页面:
class User
validates_presence_of :first_name
validates_presence_of :last_name
validates_presence_of :street, :if => :on_page_two?
validates_presence_of :city, :if => :on_page_two?
validates_presence_of :postal_code, :if => :on_page_two?
validates_presence_of :state, :if => :on_page_two?
validates_presence_of :country, :if => :on_page_two?
validates_acceptance_of :terms_and_conditions, :if => :on_page_three?
def on_page_two?
# whatever you need to determine the page number
end
def on_page_three?
# whatever you need to determine the page number
end
end
它不漂亮,但我强烈推荐这样的模式。任何更复杂的东西,当您的注册流程发生变化时,您需要重写它。
【解决方案2】:
这个问题有不同的方法。
我特别喜欢的解决方案是在模型中实现类似“状态机”的东西。通过这种方式,我可以保持一个多步骤表单的进度,而无需处理比新建/创建和编辑/更新更多的操作。
我目前正在使用用于 rails 的 State Machine gem 开发一个重型长状态机应用程序。
希望对你有帮助!
【解决方案3】:
有一个很棒的 Railcast 创建多步骤向导表单,您可以找到 here。它使用邪恶的宝石。