【问题标题】:Rails - How to have a form save the data from multiple inputs as a hashRails - 如何让表单将来自多个输入的数据保存为哈希
【发布时间】:2016-02-26 04:27:25
【问题描述】:

我正在构建一个包含 html 表格的页面,用户可以在其中选择表格标题中的名称和表格行中的内容。

用户将信息输入到表单中,该表单将被解析为哈希并保存到数据库中。

这是一个示例,其中:key 将是散列的键(表头文本),:value 将是散列中的值(表列内容)。

  <%= form_for([@page]) do |f| %>
   <%= render 'shared/error_messages', object: f.object %>

   <%= f.text_field :key1 %>    
   <%= f.text_field :value1 %>

   <%= f.text_field :key2 %>    
   <%= f.text_field :value2 %>

   <%= f.text_field :key3 %>    
   <%= f.text_field :value3 %>

   <%= f.text_field :key4 %>    
   <%= f.text_field :value4 %>

   <%= f.submit "Save"  %>

 <% end %>

我可以创建一个与page DB 关联的has_many 新数据库表,并将信息存储在该表中。然后,当我需要渲染视图时,可以将该数据重建为哈希。

但是,如果我可以将整个哈希保存到 page DB 中的一列中,那么我就不必在每次有人访问该页面时都重新构建哈希。

我正在努力想出如何在form_for 中做到这一点。

第一个问题是它需要page 表中的keyvalue 列。一个简单的解决方法是将所有输入更改为&lt;%= f.text_field :html_table %&gt;(对于page 表中的html_table 列)。但随后它将无法区分散列中的键和值。而且我也没有办法告诉它把信息放在一个散列中,然后存储到page 表的html_table 列中。

不确定这是否可能,但在我继续构建 has_many 关联表并以这种方式设置之前询问一下也无妨。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 form-for


    【解决方案1】:

    我对你的问题感到很困惑。

    您不能在控制器操作中构建这样的哈希吗?

    html_table = {
        params[:key1] => params[:value1],
        params[:key2] => params[:value2],
        params[:key3] => params[:value3],
        params[:key4] => params[:value4]
    }
    

    然后将其保存到@page.html_table 属性。

    编辑:

    在这种情况下,形式与特定对象的属性无关。因此,您应该使用 form_tag (Link),而不是使用 form_for (Link)。

    例子:

    <%= form_tag "/pages_controller/build_html_table" do %>
      <%= text_field_tag "key1" %>
      <%= text_field_tag "value1" %>
      <%= submit_tag "Save" %>
    <% end %>
    

    【讨论】:

    • 有可能,但表单会是什么样子? text_field :key1 没有 f.?
    • @user3234020 是的,您应该使用不同的助手。检查编辑
    • 好的,我明天试试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2016-04-12
    • 2014-08-20
    相关资源
    最近更新 更多