0

私のアプリケーションには、2 つの送信があるフォームがあります。1 つは、オブジェクトを作成し、ユーザーをそれにリダイレクトする典型的な送信ボタンです。もう 1 つは、オブジェクトをリモートで作成し、成功のフラッシュを表示し、ユーザーを別のページに移動させずにフォームをクリアする「保存して続行」ボタンとして機能することを目的としています。

これはどのように実装できますか?私は jQuery を使用した AJAX に大まかに精通しており、サイト全体でそれを利用する他のフォームがいくつかありますが、ハイブリッド フォームを作成する方法が見つかりません。

4

2 に答える 2

1

きれいなアプローチではありませんが、これは機能します。コントローラーのcreateアクションで、レコードの保存が終了したら、次のようなさまざまなリダイレクトを実現するための条件付きロジックを配置できます。

respond_to do |format|
  if @model.save
    if params[:commit] == "Save"
      # Redirect to saved object
    elsif params[:commit] == "Save and Continue"
      # Redirect to other places
    end
  end
end

params[:commit]送信ボタンの文字列を保存するので、それを使用してハイブリッド フォームを作成できます。

于 2012-08-25T12:34:44.697 に答える
0

MurifoX の答えは正しい道にありました。これが私がやったことのようなものです:

  if @model.save
    if params[:commit] == "Save"
      render js: %(window.location.pathname='#{object_path @object}')
    elsif params[:commit] == "Save and Continue"
      respond_to do |format|
        format.js do
          @object = Object.new
          render 'new'
        end
      end
    end
  end

基本的に、フォームにはリモートが true に設定され、AJAX リクエストに適切に応答します (jQuery.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} も使用されます)。 [保存] をクリックすると、ブラウザーは JavaScript を介して適切なページにリダイレクトされます。[保存して続行] をクリックすると、最初にフォームを読み込むために使用されたのと同じ _partial.js.erb が再び AJAX 化されます。新しいオブジェクトを使用してフォームをクリアします. 実際のコードでは、新しいオブジェクトが作成されたことを示すためにフラッシュも実行します.

于 2012-08-26T06:38:10.860 に答える