0

マテリアルを作成 (および更新) する Rails フォームがあります。明らかに、デフォルトでは、ユーザーがログインして資料が取得されると、更新アクションでフォームがレンダリングされます。ただし、ユーザーがマテリアルの別のバージョンを保存したい場合に備えて、「名前を付けて保存」アクションが必要です。これを行う明白な方法は、コントローラーの「更新」に送信するボタンと「新規」に送信する別のボタンを用意することですが、form_for パラメーターに依存しているように見えるため、これを行う方法がわかりません。

アップデート

Javascript の使用を避けるために、form_for の URL を次のように変更してみました。

<%= form_for @material, :url => choose_action_path do |f| %>

次に、コントローラーに次のものがあります。

def choose_action
  if params[:save_as] == "Save As"
    redirect_to :action => "create"
  else
    redirect_to :action => "update"
  end
end 

しかし、これは機能していません。これは機能する可能性のある戦略ですか、それともクレイジーですか?

4

1 に答える 1

0

あなたはおそらくいくつかのjqueryでこれを行うことができます。

作業中のモデルがEメールと呼ばれているとしましょう。メールを編集する場合、で作成されるフォームタグにはアクションaction='/emails/:idとメソッドがありmethod='post'ます。フォームタグの下に隠されているのは次のようなものです

<form accept-charset="UTF-8" action="/email/1" method="post">
  <div style="margin:0;padding:0">
    <input name="_method" type="hidden" value="put" />
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="f755bb0ed134b76c432144748a6d4b7a7ddf2b71" />
  </div>

詳細については、こちらをご覧ください:http: //guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work

その余分なコードのチャンクにより、フォームは投稿ではなくputリクエストを送信します。これは、その後、コントローラーの更新アクションにマップされます。フォームを作成アクションに送信するには、アクション「/email」を投稿します。つまり、上記のコードを次のようなものに操作する必要があります

<form accept-charset="UTF-8" action="/email" method="post">

divタグが削除されていることに注意してください。

したがって、私の提案は、[名前を付けて保存]ボタンを作成し、[名前を付けて保存]ボタンがクリックされたときにそれらの変更を行うjqueryを追加することです。

このstackoverflowの回答は、 jqueryJqueryでフォームアクションを変更するのに役立つ場合があります

于 2013-03-06T06:46:42.680 に答える