Pregunta

¿Cuál es la forma más fácil y más elegante para auto-enviar un formulario AJAX cuando se selecciona una opción del menú desplegable? Estoy creando una página de administración donde el administrador puede modificar los permisos de usuario (donde "permisos" se almacena como un entero), y me gustaría que los "permisos" campo para ser un cuadro desplegable que envía automáticamente las actualizaciones y cuando el administrador hace clic en la opción que quiere que el usuario tenga.

Esta es la versión reducida de lo que estoy buscando a través. Necesito saber la mejor manera de convertir esto en una forma remota que envía automáticamente cuando se hace clic en una opción de.

No dude en señalar alguna sugerencia tangenciales o cualquier otra cosa ... Soy relativamente nuevo en los carriles, y sólo acaba de llegar al punto en que puedo escribir código sin hacer referencia constantemente el trabajo de otros.

<!-- This is the "index" view, by the way. -->
<% for membership in @story.memberships %>
  <% form_for membership do |f| %>
    <%= f.select :permissions, [['none', 0], ['admin', 9]] %>
  <% end %>
<% end %>
¿Fue útil?

Solución

Hay un par de maneras de manejar esto. Ciertamente, el enfoque de observar campo es uno, pero también se podría utilizar un javascript simple o un remote_function hacerlo:

Este es el enfoque simple JS:

<% remote_form_for membership do |f| %>
    <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %>
<% end %>

La otra forma sería algo como esto, y evitarían el constructor de la forma (y esto puede tener un par de errores de sintaxis):

<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url  => permissions_path(:story_id => story,
             :with => "'permission='+value")}"})

En lo personal prefiero la primera.

Otros consejos

Tres pasos!

  1. Haga su form_for un remote_form_for ; añadir un id!
  2. observe_field después de su select
  3. Configure su observe_field para enviar su forma

El último bit se ve algo como:

<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>

En Rails 3:

<%= form_for(membership, :remote => true) do |f| %>`
  <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %>
<% end %>

Tenga en cuenta que no es this.form.submit(); onsubmit. Y no se olvide el punto y coma Javascript.

Más información sobre cómo hacerlo sin rieles utilizando el marco de su elección. El uso de las etiquetas de Rieles para realizar AJAX puede realizar una tarea de forma rápida, pero puede ser muy limitante cuando se necesita para cambiar las cosas específicas acerca de cómo lleva a cabo la etiqueta.

Lee sobre estándares de la web y la forma de escribir Javascript discreta en los siguientes sitios: http://ajaxian.com/ http://www.alistapart.com/

Usted será capaz de crear interfaces de usuario, sorprendentes más flexibles al aprender cómo realizar AJAX sin rieles.

Estoy utilizando los carriles 5 y que también estaba frente a la situación similar, pero en mi caso la respuesta dada por @ Scott no estaba presentando el formulario utilizando AJAX como se esperaba, aunque he añadido la opción remote: true a la forma (no tengo botón submit en forma).

Si alguien también se enfrenta al problema similar tratar de cambiar el código JS como esto -

<% form_for membership remote: true, id: '#member_form' do |f| %>
  <%= f.select :permissions, [['none', 0], ['admin', 9]], onchange: '$("#member_form").trigger("submit");' %>
<% end %>

Espero que esto ayude ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top