La misteriosa anomalía de transmisión del controlador de matriz de estado de la casilla de verificación dependiente del orden

Aquí está todo el código de vista relevante:

 <%= form_for(:object) do |form| %>
      <p id="batch_ops">
      <b>Objects</b>
      <%= submit_tag "Do This" %>
      <%= submit_tag "Do That",
          :confirm => "Really do that?" %>
      <p id="capture" float="left">
         <%= button_to_function "Operation_1", \
         "Element.remove('batch_input_area'); Element.show('get_op1_params')" %>
            <%= text_field_tag "op1_save_path", "_op1_full_dir_path_" %>
         <%= button_to_function "Operation_2", \
         "Element.remove('batch_input_area'); Element.show('get_op2_params')" %>
            <%= text_field_tag "op2_save_path", "_op2_full_dir_path_" %>
      </p>
      <div id="batch_input_area" style="display:none;">
      </div>
      </p>
      <ul id="object_list">
         <% @objects.each do |c| %>
         <li id="current_object" style="horizontal-align: left" width="auto"><b>
         <%= hidden_field_tag('seen_objects[]', c.id) %>
         <%= check_box_tag 'chkd_objects[]', c.id, c.object_checked? %>
         <%= c.object_address %>
         <% if c.data1? %>
            <%= c.data1 %>
         <% else %>
            <%= "_____________" %>
         <% end %>
      <% end %>
      </ul>

      <div id="get_op1_params" style="display:none;">
         <%= form_tag(
             :action => 'index',
             :remote => true,
             :html => {:id => 'op1_form'}
         ) do %>
            Options: <%= text_field :op1params, :op1_params, :value => 'freq=30 run=1 stop=0' %>
            <%= submit_tag 'Op1 Run', :confirm => 'Run Operation_1 test on checked objects?' %>
            <%= submit_tag 'Op1 Status' %>
            <%= submit_tag 'Op1 Stop', :confirm => 'Stop Operation_1 test on checked objects?' %>
            <%= link_to "Cancel", {:action => "index"} %>
         <% end %>
      </div>

      <div id="get_op2_params" style="display:none;">
         <%= form_tag(
             :action => 'index',
             :remote => true,
             :html => {:id => 'op2_form'}
         ) do %>
            Options: <%= text_field :op2params, :op2_params, :value => 'freq=30 run=1 stop=0' %>
            <%= submit_tag 'Op2 Run', :confirm => 'Run Operation_2 test on checked objects?' %>
            <%= submit_tag 'Op2 Status' %>
            <%= submit_tag 'Op2 Stop', :confirm => 'Stop Operation_2 test on checked objects?' %>
            <%= link_to "Cancel", {:action => "index"} %>
         <% end %>
      </div>

Ahora aquí está el giro: en el controlador, el Operation_1 el manejador obtiene la matriz de presencia de casilla de verificación objetos_vistos [] y los elementos activados de la matriz de estado de la casilla de verificación chkd_objects [] mientras que el Operation_2 manejador no lo hace. Si invierto el orden del get_op1_params y get_op2_params form_tag divs que se muestran por última vez arriba y luego el Operation_2 handler obtiene estas matrices de casillas de verificación, pero el Operation_1 manejador no lo hace.

Mi pregunta es simplemente: ¿Por qué?

Hace mucho que he perdido la cuenta de las diferentes cosas que he intentado evitar, que incluían más hidden_field_tags dentro de form_tags. Al final me di por vencido y usé un estilo mucho menos elegante submit_tag con un text_field_tag en lugar de la Operation_2 button_to_function y su form_tag asociado pero todavía no entiendo por qué no pude hacer que ambas operaciones funcionen usando button_to_function como se ilustra arriba.

Si alguien puede hacer que esto funcione, publique su solución aquí. Cualquier sugerencia que no sea una solución funcional, probablemente ya la haya visto y probado.

preguntado el 10 de marzo de 12 a las 02:03

¿Puede limitar el código para incluir solo el código que demuestra el problema? Facilitará la ayuda de alguien y, quién sabe, podrá descubrir la solución usted mismo. -

No hay formularios dentro de los formularios, simplemente no cerré todo en mi lista. Las construcciones form_for y @ objects.each se cierran antes de que ocurran los elementos restantes que se muestran. Nicholaides tiene razón, lo recortaré a un ejemplo completo pero mínimo que demuestre el problema y lo publique cuando tenga tiempo, probablemente a finales de esta semana o la próxima. -

Actualizado con una muestra de código completa y contigua. -

¿Podría intentar encontrar el problema exacto porque aquí es casi como "Oye, mi código (largo) no funciona ... aquí está ..." -

El problema exacto se describe arriba donde dice "Ahora aquí está el giro". El ejemplo de código se toma del código que funciona bien excepto por el giro. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.