Übergeben Sie den Wert der HTML-Tabelle an die Variable im Controller-Ruby

Ich habe einen Tisch im Blick:

<%= form_tag save_table_path do %>
     <% @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 %>
      <% end %>
 <%= submit_tag "save",:class => "btn btn-primary offset4" %>
<% end %>

Ich weiß nicht, was ich als nächstes tun soll, um den Wert aller Zellen in der Tabelle an den Controller zu übergeben, wie zum Beispiel:

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

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 ?

Ich möchte nicht JS verwenden, was ist, wenn ich zu <td> ändern <% = text_field_tag: Zelle, Wert%> </td> wie kann ich Wert aller Zelle in der Tabelle erhalten?
hinzugefügt der Autor Green, Quelle
hinzugefügt der Autor vee, Quelle

2 Antworten

Ich denke, Sie sind verwirrt mit dem Umgang mit Daten in Rails (oder einem beliebigen Backend-System)


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:


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]

Hope this helps?

Hmmm, vielleicht können wir die Tabellenzellen so ändern: <% = text_field_tag ​​"#cell_ {i}",: value => value%>
hinzugefügt der Autor Richard Peck, Quelle
Kein Problem! Könnte es wert sein, die Antwort zu akzeptieren, wenn es funktioniert hat!
hinzugefügt der Autor Richard Peck, Quelle
es sendet nicht alle params, es sendet nur params zelle [0] beispiel: meine tabelle 1 2 3 4 5 6 7 8 9 10 tabelle = params [: zelle] [0]> tabelle = 1 tabelle = params [: Zelle] [1]> Tabelle = Nill
hinzugefügt der Autor Green, Quelle
Es funktioniert, tks für Ihre Hilfe.
hinzugefügt der Autor Green, Quelle

Versuche dies:

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

Beim Senden des Formulars erhalten Sie Werte wie params [: table] [: cell1], params [: table] [: cell2] und so weiter ...

Hoffe das hilft..