У меня есть модель, в которой поле текстового массива определено так:
t.text "widgets", default: [], array: true
и допустимый параметр в моем контроллере
params.require(:model).permit(widgets: [])
На мой взгляд Я могу построить значения для помещения в этот массив, используя поля ввода, которые выглядят как
<input multiple="true" value="widget_name" name="model[widgets][]" id="model_widgets"/>
Это прекрасно работает для всех случаев добавления и удаления значений из массива, кроме случая удаления последнее значение из массива, если оно уже существует в модели
Есть ли волшебный скрытый вход, который я могу использовать, чтобы передать пустой массив обратно в контроллер для обновления?
Я знаю, что флажки имеют похожую проблему, в которой вы можете использовать скрытое поле со значением 0. Я пытался использовать подобные методы, такие как
<input type="hidden" value="0" name="model[widgets][]" id="model_widgets"/>
, который возвращает массив в контроллер, который выглядит как ["0"]
(очевидно),
<input type="hidden" value="0" name="model[widgets]" id="model_widgets"/>
, который является недопустимым параметром в контроллере (поскольку это не массив), и даже
<input type="hidden" value="[]" name="model[widgets]" id="model_widgets"/>
- также недопустимым, надеялся для пустого массива.
Я знаю Теперь я могу выполнить sh эту задачу, включив новый параметр в моем контроллере, который, когда присутствует, указывает на пустой массив виджетов, но я надеюсь, что есть "правильный" подход с точки зрения представления.