В Rails, как обрабатывать несколько отмеченных флажков, просто разделить на, или?
Интересно, что такое "рельсы" для обработки ситуации, когда пользователь проверяет несколько флажков (с тем же именем), и он отправляется обратно в контроллер.
Как бы вы проверили, были ли выбраны несколько элементов, затем разделены на значения идентификатора и т.д.
Ответы
Ответ 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
Мне потребовалось некоторое время, чтобы понять, я надеюсь, что это поможет кому-то.