3

Rails でプロセスにステップを追加する際のベスト プラクティス (または通常のプラクティス) は何ですか?

たとえば、私はSpree e コマース Rails プラットフォームを使用しており、製品を「カートに追加」しようとするときに入力する複数ステップのフォームを追加したいと考えています。

カートに製品を追加する現在のスプリーの実装は、基本的に次のとおりです。

ProductsController#show -> OrdersController#edit

これにより、製品がカートに追加され、カートに残ります。

だから私は、コアコードを最小限に変更するために、どうすればプロセスが次のようになるのか疑問に思っています。

ProductsController#show -> SurveysController#show -> (survey stuff...) -> OrdersController#edit

私がやろうと思っていることは次のとおりです。

  • "products/show.html.erb" を変更して、surveys_controller.rb に移動します。また、products_controller.rb を putsession[:redirect_to] = order_checkout_pathに変更して、SurveysController で処理できるようにします。
  • または、それらの余分なものをポップアップさせて、最後のものに到達したら、元のメソッドを呼び出すようにします。

それの何がいけないの?より良いアプローチは何ですか?これは、より一般的には、コア コードを変更せずにマルチステップ プロセスを設計する方法についての質問です。ウィザードではなく、他のものの途中に余分なものを追加するだけです。

助けてくれてありがとう、ランス

4

3 に答える 3

1

restful_workflowをチェックしてみてください:

このプラグインは、TurboTax と同様にコントローラーでインタビュー スタイルのワークフローを提供しますが、モデルをデータベースにすぐに保存する必要はありません。オーバーライドされない限り、すべてのデータはセッションに保存されます。

于 2010-02-14T22:51:57.023 に答える
0

これはRESTfulWebアプリの標準的なフローではないため、Railsには簡単な方法がないため、何をするにしてもハックな人である必要があります。

セッション変数は私には問題ないようです。短くてシンプル。ただし、将来の競合が発生しないように、キーをよりわかりやすいものにすることをお勧めします。

于 2010-02-08T23:14:16.240 に答える
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

「add_to_cart」プロセスについて 100% 確信があるわけではありませんが、ログ全体を調べれば簡単に推測できます。独自のフローを Spree に入れるのは少し奇妙ですが、間違いなく実行できます。

于 2011-06-21T12:03:29.697 に答える