我有一个模型,它有一个像这样定义的文本数组字段
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"/>
- 也是不允许的,希望有一个空数组。
我知道我可以通过在我的控制器中启用一个新参数来完成这项任务,该参数在出现时表示一个空的小部件数组,但我希望从视图的角度来看有一个“正确”的方法。