2012-06-18 11 views
5

Mam formę częściową używam w dwóch miejscach, aby dodać nowe składniki (w aplikacji do receptury). Kiedy po raz pierwszy stworzyłem aplikację, chciałem, aby użytkownik mógł dodać nowy składnik podczas wypełniania nowej karty receptury. Użyłem modalnego wyskakującego okienka i AJAX, więc nowa forma składnika wyskakuje, zostaje zakończona, a po kliknięciu przycisku przesyłania niektóre jQuery ukrywa pole modalne i aktualizuje niektóre znaczniki opcji na stronie.Szyny - przy użyciu tej samej formy częściowej dla żądań AJAX i innych niż AJAX

Z formularza receptury nazywam składnik częściowy przy użyciu <%= link_to 'New ingredient', new_ingredient_path, :remote => true %>. Mój składnik plik new.html.erb zawiera jedynie wezwanie do częściowej:

<%= render 'form' %> 

A _form.html.erb wygląda następująco: (innych dziedzinach snipped dla zwięzłość)

<%= 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 %> 

mój problem jest że teraz chcę, aby użytkownik był w stanie stworzyć nowy składnik z sekcji składników witryny. Ponieważ nie potrzebuję pola modalnego i funkcji jQuery w tej części witryny, wolałbym, aby było to traktowane jako żądanie HTML. Jednak nie wiem, jak "wyłączyć" funkcjonalność AJAX na żądanie, lub jeśli jest to nawet dobra praktyka.

Pomyślałem o przekazaniu parametru w linkach do formularza nowego składnika i użyciu go do kontrolowania: zdalnego atrybutu w formularzu. Jaka jest tutaj najlepsza praktyka? Idealnie byłoby kontrolować zdalny atrybut formularza z linku, pozwalając mi zachować moją AJAX w jednym miejscu i używać HTML w drugim. Mógłbym łatwo powielić formularz jako non-AJAX wersji i nazwać, ale to nie jest bardzo DRY ...

Odpowiedz

4

Jak o prosty:

<%= form_for @ingredient, :remote => request.xhr? do |f| %> 
+0

Brilliant - czyste, proste i (co najważniejsze) - to działa!!! Dziękuję Ci! – Jim

Powiązane problemy