在Rails中添加更多步骤时,最佳实践(或常规实践)是什么?
例如,我正在使用Spree e-commerce Rails platform,我想添加一个人们在尝试“添加到购物车”产品时应填写的多步骤表单。
目前将产品添加到购物车的狂欢实施基本上是:
ProductsController#show -> OrdersController#edit
将产品添加到购物车中,然后将您留在购物车中。
所以我想知道,为了最大限度地改变大礼包中的核心代码,我该如何制作它以使过程更像这样:
ProductsController#show -> SurveysController#show -> (survey stuff...) -> OrdersController#edit
我想要做的是:
session[:redirect_to] = order_checkout_path
,我可以在SurveysController中处理。这有什么问题?什么是更好的方法?这是一个关于更一般地说,人们如何在不修改核心代码的情况下构建多步骤流程的问题。不是wizard,只是在其他事情的中间添加额外的东西。
感谢您的帮助, 兰斯
答案 0 :(得分:1)
您可以查看restful_workflow:
这个插件提供了面试风格 控制器中的工作流程,类似于 TurboTax,但无需保存 模型立即到数据库。 所有数据都存储在会话中 除非被覆盖。
答案 1 :(得分:0)
这不是一个RESTful网络应用程序中非常标准的流程,所以无论你做什么都必须是一个hackish,因为Rails没有提供简单的方法。
会话变量对我来说似乎很好。简短而简单。但是,您可能希望使您的密钥更具描述性,以便您不会看到未来的冲突。
答案 2 :(得分:0)
您是否尝试过orders_controller_decorator.rb?
OrdersController.class_eval do
before_filter :show_survey, :only => :populate
def new_survey
#regular stuff
respond_to do |format|
format.html do
#if you've already been through this process, skip the before_filter
redirect_to(new_order_line_item_url(session[:order_line_item])) and return if session[:order_line_item]
#otherwise point to the form and store the order data in session
session[yeahyougetthepoint]
render 'new_survey'
end
end
end
def create_survey
#regular stuff
respond_to do |format|
format.html {redirect_to new_order_line_item(session[:order_line_item]}
end
end
我不是100%肯定'add_to_cart'过程,但可以通过在日志中挖掘整个事物来轻松推断出来。将你自己的流量投入Spree有点奇怪,但绝对可以做到。