Подтвердить что ты не робот

В Rails, как обрабатывать несколько отмеченных флажков, просто разделить на, или?

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

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

4b9b3361

Ответ 1

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

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 в представлении и, следовательно, массовое назначение идентификаторов тегов. Это самый общий пример.)

Ответ 2

f.check_box :tag_ids, {multiple: true}, 1, nil

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

Вот причина, существует опция "multiple: true", которая позволяет вводить ваш вход в массив. Если не существует параметра multiple: true, это не будет разрешено.

Ответ 3

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

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

Ответ 4

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

check_box_tag "tag_ids[]", 1, true

И не это:

check_box_tag 'tag_ids[]', 1, true

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