2012-06-18 13 views
5

Tengo un formulario parcial que estoy usando en dos lugares para agregar nuevos ingredientes (en una aplicación de recetas). Cuando primero construí la aplicación, quería que el usuario pudiera agregar un nuevo ingrediente mientras llenaban una nueva tarjeta de recetas. Usé un menú emergente modal y AJAX para que aparezca el nuevo ingrediente, se complete y, cuando se hace clic en el botón Enviar, jQuery oculta el cuadro modal y actualiza algunas etiquetas de opciones en la página.Rieles: uso de la misma forma parcial para solicitudes AJAX y no AJAX

De la forma de la receta llamo el ingrediente parcial usando <%= link_to 'New ingredient', new_ingredient_path, :remote => true %>. Mi ingrediente archivo new.html.erb sólo contiene una llamada a la parcial:

<%= render 'form' %> 

Y el _form.html.erb se parece a: (otros campos snipped por razones de brevedad)

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

Mi problema es que ahora quiero que el usuario también pueda crear un nuevo ingrediente en la sección de ingredientes del sitio. Como no necesito el cuadro modal y la funcionalidad de jQuery en esa parte del sitio, preferiría que esto se tratara como una solicitud HTML vana. Sin embargo, no sé cómo "desactivar" la funcionalidad AJAX bajo demanda, o si esto es incluso una buena práctica.

Pensé pasar un parámetro en los enlaces al nuevo formulario de ingredientes y usarlo para controlar el atributo: remote en el formulario. ¿Cuál es la mejor práctica aquí? Lo ideal sería una forma de controlar el atributo remoto del formulario desde el enlace, lo que me permite mantener mi AJAX en un lugar y usar HTML en el otro. Yo podría duplicar el formulario como una versión no AJAX y llamar a eso, pero eso no es muy seco ...

Respuesta

4

¿Qué hay de simple:

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

- genial limpia, simple, y (lo mejor de todo) - ¡¡¡funciona!!! ¡Gracias! – Jim

Cuestiones relacionadas