2016-02-05 3 views
0

Так, например, у меня есть таблица с флажком для каждой строки. Теперь я добавил функциональность, чтобы иметь возможность удалять несколько выбранных строк с помощью встроенного хелпера. Проблема в том, что мне также нужно иметь возможность «отключать выбранные» и «включить выбранные» строки.Если вы не можете вложить HTML-формы, как вы можете отправить несколько вариантов?

<%= form_tag sccm_destroy_multiple_url , method: :delete do %> 
.... some table rows and data 
<%= check_box_tag "ID[]", group.id %> 
... some more rows 

<%= button_tag "Delete Selected", type: 'button submit', class: "btn btn-danger",data: {confirm: "Are you sure you want to delete these groups?"} do %>       

<i class="fa fa-trash-o"></i> Delete Selected 
<%end%> 
<%end%> 

Теперь мне нужно поставить еще одну кнопку «Disable Selected», но я не могу этого сделать, так как это было бы гнездовые формы и формы являются единственным способом хранить несколько идентификаторов флажок, что я знаю. ..есть идеи?

+1

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

+0

проблема в том, что каждая кнопка отправки должна отображать другой маршрут, поскольку каждая функциональность сопоставляется с другим действием контроллера. – Turk

ответ

0

В основном рельсы получает обойти это ограничение в HTML, создавая массивы и вложенные хэши из названия атрибутов:

<input type="text" name="dogs[0][breed]" value="Husky"> 
<input type="text" name="dogs[1][breed]" value="Shiba Inu"> 

рельсы будут интерпретировать эти Params как:

"dogs" => { 
    "0" => { 
    "breed" => "Husky" 
    }, 
    "1" => { 
    "breed" => "Shiba Inu" 
    }, 
} 

Вы обычно используете fields_for, который дает вам специальный экземпляр компоновщика формы «с областью»:

<%= forms_for(@adaption_agency) do |k| %> 
    <%= f.fields_for(:dogs) do |doggy_fields| %> 
    <%= doggy_fields.text_field :breed %> 
    <% end %> 
<% end %> 

В вашем случае, что вы могли бы создать маршрут update_multiple и использовать fields_for с массивом записей.

Но я бы подумал об использовании ajax, чтобы позволить пользователю манипулировать несколькими записями на одной странице с помощью стандартных действий CRUD. Это намного сложнее, чем пытаться сделать все в мега-действиях.

<%= dogs.each do |doggy| %> 
    <%= form_for(doggy), class: 'doggy-form' do |f| %> 
     <%= f.text_input :breed %> 
    <% end %> 
    <%= button_to('Delete', dog_path(doggy), method: :delete, class: 'doggy-form') %> 
<% end %> 

Обратите внимание, что это создает формы для каждого типа действий.

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