В Rails, как обрабатывать несколько отмеченных флажков, просто разделить на, или? - PullRequest
35 голосов
/ 13 декабря 2010

Любопытно, что такое «рельсовый способ» обработки ситуации, когда пользователь проверяет несколько флажков (с одним и тем же значением имени), и он отправляется обратно в контроллер.

Как бы вы проверили, были ли выбраны несколько элементов, а затем разделены на значения идентификаторов и т. Д.

Ответы [ 5 ]

56 голосов
/ 13 декабря 2010

Самый простой способ сделать это - установить эти флажки в массив.

HTML:

<input type="checkbox" name="tag_ids[]" value="1" />
<input type="checkbox" name="tag_ids[]" value="2" />
<input type="checkbox" name="tag_ids[]" value="3" />

Контроллер:

tag_ids = params[:tag_ids]

(Конечно, вы, вероятно, использовали бы в представлении помощники на основе form_for и, следовательно, массовое присвоение идентификаторов тегов. Это просто наиболее общий пример.)

20 голосов
/ 26 октября 2015
f.check_box :tag_ids, {multiple: true}, 1, nil

Правильный ответ:

Вот причина, есть опция «множественное значение: истина», которая позволяет помещать ваши входные данные в массив. Если не указан параметр множественного числа: истина, это не будет разрешено.

2 голосов
/ 02 октября 2018

В дополнение к ответу Чака Каллеба я понял, что, отправив пустую строку вместо nil или false в качестве непроверенного значения, Rails поймет, как удалить связанные идентификаторы в действии обновления:

<%= f.check_box :tag_ids, {multiple: true}, tag.id, '' %>

1 голос
/ 03 сентября 2017

Вот пример вида и контроллера, например, где несколько уборщиков могут находиться в нескольких городах.

<%= form_for(@cleaner) do |f| %>
  <p>
    <%= f.label :cities %><br />
    <% for city in City.all %>
      <%= check_box_tag "cleaner[city_ids][]", city.id, @cleaner.cities.include?(city) %>
      <%=h city.name %><br />
    <% end %>
  </p>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

И в контроллере

def cleaner_params
  params.require(:cleaner).permit(city_ids: [])
end

Вы можете найти полное руководство по «рельсовому пути», как это сделать https://kolosek.com/rails-join-table/

0 голосов
/ 12 сентября 2014

Если вы хотите использовать параметр checked, вы должны написать это:

check_box_tag "tag_ids[]", 1, true

А не это:

check_box_tag 'tag_ids[]', 1, true

Мне понадобилось время, чтобы выяснить,Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...