ruby-on-rails - 将html表的值提交给 Controller ruby中的变量

标签 ruby-on-rails ruby ruby-on-rails-3

我看到了一张 table :

#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 %>

我不知道接下来要做什么将表中所有单元格的值传递给 Controller ​​,例如:

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

编辑:我找到了解决这个问题的方法,它必须使用js。
我不想使用js,如果我更改为 <%= text_field_tag :cell, value %> 如何获取表中所有单元格的值?

最佳答案

我认为您对如何处理 Rails(或任何后端系统)中的数据感到困惑


HTML

HTML是一种标记语言;这意味着如果你给它特定的代码,它就会把各种元素放到页面上。 <table>标签是这些元素之一,与应用程序的 Controller 端功能无关


Controller 参数

HTML 表单参数与 form 直接相关(没有别的)

在 Rails 中,您将得到如下排序的 params 哈希:

params[:form_name][:input_name]

您的代码

从您所显示的内容来看,您似乎缺少几个部分

首先,你需要input元素(填充参数)。目前,您拥有:

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

这不会创建任何参数,因为它不是输入元素。它只是在屏幕上输出的一个值。你需要的是这样的:

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

通过添加这些输入,Rails 能够使用它们的值填充 params 哈希,然后您可以像这样从 Controller 访问这些值:

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

希望这有帮助吗?

关于ruby-on-rails - 将html表的值提交给 Controller ruby中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628964/

相关文章:

ruby-on-rails - Rails fields_for 未显示

ruby-on-rails - 使用 Wicked PDF 将 PDF 附加到电子邮件时如何指定布局

ruby-on-rails - 如何通过 HTTParty gem 传递补丁 http 请求参数?

ruby-on-rails - 我应该将 "global"共享部分模板放在哪个文件夹中?

ruby-on-rails - 创建 Rails 新项目时出错 (../config/boot (LoadError)

ruby-on-rails - 如何通过 Active Record 统计数据库中的所有对象

ruby-on-rails - 如何在 JSON 中获取对象数组的某些属性

表示性别或性别的 Ruby 约定

ruby-on-rails - Ruby on Rails link_to 使用 variable_name_path 和 Controller :variable_name

ruby-on-rails - 仅从现有模型/ Controller 生成测试