posicionamiento para name metadatos keywords etiquetas etiqueta codigo buscadores html ruby post text sinatra

para - seo html



Guarde todas las entradas de usuario del texto html generado en un bucle con ruby ​​y sinatra (1)

Estoy creando una página web que muestra una tabla. También tiene cuatro columnas al final de cada registro que son campos de texto donde el usuario puede ingresar datos. Cuando el usuario pulsa el botón Enviar en la parte inferior, quiero guardar todos los datos en todos los campos de texto y agregarlos a mi tabla. ¿Cómo puedo guardar los datos para todos los campos de texto? Aquí está mi código.

<h1>Testing Table</h1> <form action="/table/" method="POST"> <table> <thead> <tr> <% event_column.each do |header| %> <th> <%= header %> </th> <% end %> </tr> </thead> <tbody> <% events.each do |event| %> <tr> <% event = event.first(14) %> <% event.each do |key, value| %> <td> <%= value %> </td> <% end %> <td><input type="text" name="event_description"></td> <td><input type="text" name="event_type"> <td><input type="text" name="event_class"> <td><input type="text" name="issue_expert"></td> </tr> <% end %> </tbody> </table> <br/> <input type="submit"> <% ActiveRecord::Base.clear_active_connections! %> </form>

Entiendo mi problema. Ya que estoy usando la misma variable para escribir todas las columnas ingresadas por el usuario cuando intento mostrar en mi método POST

<td><%= params[:event_description] %></td>

Solo mostrará el último valor ingresado porque se está reutilizando. ¿Hay alguna forma de que cuando pulso enviar pueda recorrer todos los campos de texto html y guardar todos los datos? Estoy bastante atrapado aquí y he buscado por todos lados. Entiendo cómo guardar la entrada de texto para la última fila, pero no sé cómo guardar todas las entradas de texto. Soy nuevo en Sinatra, así que debo estar haciendo algo fundamentalmente equivocado.


Por defecto, cuando Sinatra (utilizando Rack) analiza los datos del formulario, si hay alguna duplicada, se utiliza la última y sobrescribe las demás. Sin embargo, si usa un nombre que finaliza con [] , Sinatra crea una matriz que contiene todas las entradas con ese nombre.

Entonces, en su caso, necesita cambiar los nombres de los elementos de entrada:

<input type="text" name="event_description[]">

(y de manera similar para los demás). Tenga en cuenta el [] al final del nombre.

Ahora cuando envíe el formulario, params[''event_description''] será una matriz que contiene todos los elementos enviados a los elementos de entrada de event_description .

El análisis de consultas de Sinatra / Rack es en realidad más sofisticado que este, por lo que puede ir más allá con su formulario. En tu ciclo, podrías hacer algo como esto:

<td><input type="text" name="events[][description]"></td> <td><input type="text" name="events[][type]"> <td><input type="text" name="events[][class]"> <td><input type="text" name="events[][issue_expert]"></td>

Ahora, cuando envíe el formulario y lo analice, params[''events''] contendrá una matriz de hashes, cada uno con la description teclas, el type , la class y issue_expert . Luego puede iterar sobre esta matriz y procesar los datos según corresponda. Es posible que desee agregar una entrada de id oculta con cada hash para asegurarse de que cada conjunto de datos esté asociado con el registro correcto (podría parecerse a <input type=hidden name="events[][id]" value="<% event.id %>"> ).