2016-02-28 3 views
0

У меня есть форма, которая сохраняет значения в хэши. А из контроллера хэш сохраняется в db.Сохранение хэша в БД, содержащем массивы представленных форм.

Вот форма

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

Вот где хэш сохраняется в БД

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 

мне нужно изменить форму таким образом, значение в хэш будет массив. А из формы пользователь может добавлять элементы в массив значений.

Это то, что информация сохраняется как в БД в настоящее время

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

и мне нужно, чтобы изменить эту

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

Так что в конечном итоге что-то вроде этого можно спастись в db из формы и через контроллер

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

Я буду использовать js, чтобы пользователь мог добавить и r emove input, но сначала я должен знать, как будет выглядеть форма, прежде чем я начну с этого.

На данный момент для простоты какая форма и, возможно, контроллер должны выглядеть так, чтобы сохранить нижний хэш в БД.

Какая часть '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 ​​'[key1] []'%>' снова в форму, я предполагаю, что она просто перезапишет первое значение ввода, не добавляемое в массив, назначенный 'key1'. – Rob

Смежные вопросы