2016-02-28 44 views
0

我有一个将值保存到散列的表单。并从控制器散列保存到数据库。将散列保存到包含表单提交数据的数组的数据库

下面是其中散列被保存到DB

if @page.update (category_params) 
    @page.update(table_content: params[:content]) 
    redirect_to show_pages_path(@category, @page) 
    flash[:success] = "Updated." 
    else 
    render 'edit' 
    end 

我需要改变的形式,以便在散列值将是一个数组形式

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

    <%= text_field_tag 'content[key1]' %> 

    <%= text_field_tag 'content[key2]' %> 

    <%= text_field_tag 'content[key3]' %> 

    <%= text_field_tag 'content[key4]' %> 
    <%= f.submit "Save" %> 

    <% end %> 

这里。从表单中,用户可以将项目添加到值数组。

这就是信息保存为到DB目前

{"key1"=>"value1", "key2"=>"value2", "key3"=>"value3", "key4"=>"value4"} 

,我需要它来改变这个

{"key1"=>["value1"], "key2"=>["value2"], "key3"=>["value3"], "key4"=>["value4"]} 

所以最终这样的事情有可能被保存到分贝从形式和通过控制器

{"key1"=>["value1a","value1b"], "key2"=>["value2"], "key3"=>["value3a", "value3b"], "key4"=>["value4"]} 

我将使用js,因此用户可以添加和r emove输入,但我首先需要知道什么表单设置将是像我开始之前。

现在为了简单起见,表单和控制器需要看起来像将底部散列保存到数据库那样。

需要更改'content[1]'的什么部分,以便我可以将其他输入添加到键值key1值数组中。

我无法找到如何将输入保存为数组,更不用说如何将2个输入保存为数组的一部分。

基本上需要做些什么来保存第三个数组从列表到数据库从改变我有的形式和控制器。

回答

0

尝试把你的名字的排列形式,

content[key1][] 

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

 
    <%= text_field_tag 'content[key1][]' %> 
 

 
    <%= text_field_tag 'content[key2][]' %> 
 

 
    <%= text_field_tag 'content[key3][]' %> 
 

 
    <%= text_field_tag 'content[key4][]' %> 
 
    <%= f.submit "Save" %> 
 

 
    <% end %>

+0

如何将用户以上的值更添加到一个数组? (最好从第二个输入字段)'<%= text_field_tag'content [key1] []'%>'我想象会使哈希值成为一个数组,其中只有一个数组。如果我再次将'<%= text_field_tag'content [key1] []'%>'添加到表单中,我想它会覆盖第一个输入值而不会添加到分配给'key1'的数组中。 – Rob