Rails - 如何使表单将来自多个输入的数据保存为哈希

时间:2016-02-26 04:27:25

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

我正在构建一个包含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 %>

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

但是,如果我可以将整个哈希值保存到page数据库的列中,那么每次有人访问该页面时,我都不必重建哈希值。

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

第一个问题是它需要key表中的valuepage列。一个简单的修复方法是将所有输入更改为<%= f.text_field :html_table %>html_table表中的page列)。但后来它无法区分哈希中的键和值。我也没有办法告诉它将信息放在一个哈希值中,然后存储到page表的html_table列中。

不确定这是否是可能的事情,但在我继续构建has_many关联表并以此方式进行设置之前,不要问它。

1 个答案:

答案 0 :(得分:0)

我对你的问题感到困惑。

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

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