enviar el valor de la tabla html a la variable en el controlador ruby

Tengo una mesa a la vista:

#view
<%= form_tag save_table_path do %>
    <table>                         
     <% @channel_name_body.values.max_by(&:size).size.times do |i| %>
        <tr class="border">
            <% @channel_name_body.values.map { |a| a[i] }.each do |value| %>
              <td contenteditable class="border light_green"><%= value %></td>
            <% end %>
        </tr>
      <% end %>
    </table>
 <%= submit_tag "save",:class => "btn btn-primary offset4" %>
<% end %>

No sé qué hacer después de pasar el valor de todas las celdas de la tabla al controlador, como por ejemplo:

#controller
def save_table
  @table=params[:table] #or @row1=params[:row1]... or @col1=params[:col1]....
end

Edit: I found way to solve this problem, it must use js.
I don't want to use JS, what about if I change to <%= text_field_tag :cell, value %> how can I get value of all cell in table ?

0
No quiero usar JS, ¿qué pasa si cambio a <td> <% = text_field_tag: cell, value%> </td> ¿cómo puedo obtener el valor de todas las celdas de la tabla?
agregado el autor Green, fuente
agregado el autor vee, fuente

2 Respuestas

Creo que te confundes con cómo manejar los datos en Rails (o cualquier sistema de back-end)


HTML

HTML is a markup language; which means if you give it certain code, it will put various elements onto the page. The <table> tag is one of those elements, and has no bearing on the controller-side functionality of your app


Controller Params

HTML form params are directly related to the form (nothing else)

In Rails, you get the params hash ordered like this:

params[:form_name][:input_name]

Your Code

From what you've shown, it seems you have several parts missing

Firstly, you need input elements (to populate the params). Currently, you have:

<td contenteditable class="border light_green"><%= value %></td>

This does not create any params, as it's not an input element. It's just a value that's been outputted on the screen. What you'd need is something like:

<td contenteditable class="border light_green"><%= text_field_tag :cell, :value => value %></td>

By adding these inputs, you will give Rails the ability to populate the params hash with their values, which you can then access from your controller like this:

def save
    @table = params[:form_name][:cell][0]
end

Hope this helps?

0
agregado
Hmmm bueno, tal vez podamos cambiar las celdas de la tabla a algo como esto: <% = text_field_tag ​​"#cell_ {i}",: value => value%>
agregado el autor Richard Peck, fuente
¡No hay problema! ¡Puede valer la pena aceptar la respuesta si funcionó!
agregado el autor Richard Peck, fuente
no envía todos los parámetros, solo envía solo la celda params [0] ejemplo: mi tabla 1 2 3 4 5 6 7 8 9 10 tabla = params [: celda] [0]> tabla = 1 tabla = params [: celda] [1]> tabla = nill
agregado el autor Green, fuente
Funciona, por tu ayuda.
agregado el autor Green, fuente

Prueba esto:

<%= text_field_tag "table[cell#{index}]", value %>

Al enviar el formulario, obtendrá valores como params [: table] [: cell1], params [: table] [: cell2] y así sucesivamente ...

Espero que esto ayude..

0
agregado