2016-02-28 48 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