6

(レシピアプリで)新しい材料を追加するために2か所で使用している部分的なフォームがあります。私が最初にアプリを作成したとき、ユーザーが新しいレシピカードに記入しているときに新しい材料を追加できるようにしたかったのです。モーダルポップアップとAJAXを使用したので、新しい材料フォームがポップアップして完成し、送信ボタンをクリックすると、jQueryによってモーダルボックスが非表示になり、ページ上のオプションタグが更新されます。

レシピフォームから、を使用して材料を部分的に呼び出します<%= link_to 'New ingredient', new_ingredient_path, :remote => true %>。私の成分new.html.erbファイルには、パーシャルへの呼び出しのみが含まれています。

<%= render 'form' %>

そして、_form.html.erbは次のようになります:(簡潔にするために他のフィールドを切り取った)

<%= form_for @ingredient, :remote => true do |f| %>
    <%= render 'shared/ingredient_error_messages' %>
    <div class="field">
        <%= f.label :name %>
        <%= f.text_field :name %>
    </div>
    <div class="field">
        <%= f.label :amount %>
        <%= f.text_field :amount%>
    </div>
    <div class="actions">
        <%= f.submit "Save ingredient" %>
    </div>
<% end %>

私の問題は、ユーザーがサイトの材料セクションから新しい材料を作成できるようにしたいと思っていることです。サイトのその部分にはモーダルボックスとjQuery機能は必要ないので、これをバニラHTMLリクエストとして扱いたいと思います。ただし、オンデマンドでAJAX機能を「オフにする」方法、またはこれが良い習慣であるかどうかはわかりません。

新しい成分フォームへのリンクでパラメーターを渡し、それを使用してフォームの:remote属性を制御することを考えました。ここでのベストプラクティスは何ですか?理想的には、リンクからフォームのリモート属性を制御する方法で、AJAXを一方の場所に保持し、もう一方の場所でHTMLを使用できるようにします。フォームを非AJAXバージョンとして簡単に複製して呼び出すことができますが、それはあまり乾燥していません...

4

1 に答える 1

5

シンプルにどうですか:

<%= form_for @ingredient, :remote => request.xhr? do |f| %>
于 2012-06-18T20:01:03.060 に答える