0

Rails で初めてのアプリを作成しています。基本的に、私は新しい顧客フォームを持っています。通常、新しい顧客を入力すると、作成したレコードにリダイレクトされます。

ただし、すべてのページをajax経由でロードしているため、リダイレクトするのではなく、新しいレコードをロードしたいと考えています。

フォームは既に ajax 経由で起動しています。必要なのは、新しいレコードの URL にアクセスしてコンテナにロードする方法を知ることだけです。

それが理にかなっていることを願っています。前もって感謝します!

4

2 に答える 2

0

form_forヘルパーメソッドにオプション:remote => trueを追加して、ページリダイレクトの代わりにフォームがajax経由で投稿されるようにすることができます。例の場合:

<%= form_for(@post, :remote => true) do |f| %>
  ...
<% end %>

次に、create.js.erbという名前の新しいテンプレートを作成します。このテンプレートは、createメソッドの実行後にレンダリングされます。

このテンプレートでは、作成した新しいレコードの詳細を表示できます。

例の場合:

$('some_element').replaceWith('<%=@posts.name %>');
于 2013-03-07T12:19:34.023 に答える
0

編集: JavaScript で load を使用することについて言及しました。サーバーへの2回の往復を行っているため、通常はこれを避けます。1) 作成 2) html を取得して div にロードします。さらに、エラーが発生した場合、それが何であれ、「良いこと」を見つけて実行することはより困難になります。

remote: true オプションをフォームに追加したら、サーバー側で何が起こるかを処理する必要があります。

REST を使用すると仮定すると、create アクションを含むコントローラーが作成されます。通常、このメソッドはアイテムを作成し、続いて作成ページの HTML を返します。これの代わりに、アクションの JavaScript ビューを作成する必要があります。これにより、このアクションがヒットしたときに何をすべきかを呼び出しページに伝えます。

フォームに「new_record_form」という div があり、「new_records」という別の div があるとします。フォーム内のフォーム要素を空白にして、効果的にリセットする必要があります。また、新しいレコードを「new_records」div に追加することもできます。

新しいレコード div にレコードを追加するには、次のようにします。

$("#new_records").append("#{@new_record.name}");

フォームを送信すると、これが追加されているはずです。問題をデバッグする優れた方法の 1 つは、インスペクターを使用することです。クロムを使用している場合は、任意の場所を右クリックし、要素を調べてネットワークを選択します。これはフォーム送信前に行ってください。ajax 呼び出しと応答を確認できます。あなたのログも役に立ちます。

フォームも空白にすることを忘れないでください。

注: すべてのページが ajax であるとおっしゃいましたが、さまざまな問題が発生するため、これが 100% 妥当かどうかを評価することを強くお勧めします。これが主題に関する最高の記事であるとは言いませんが、読む価値があるかもしれません.

于 2013-03-08T12:00:02.407 に答える