我有一个带有父模型的 Rails 表单和另一个模型的可能多个子节点的嵌套属性。
子模型有一个属性,该属性在逻辑中作为数组进行操作,但使用 Rails 内置的序列化方法序列化为 YAML 字符串。
在表单中,我显示了数组的每个单独成员,以便用户可以有选择地删除成员。
当用户销毁所有成员时,就会出现问题。表单不会将参数的任何值传递给 Rails 控制器,当调用 UPDATE 操作时,它会忽略该属性,因为在表单参数哈希中没有它的键。这当然是复选框之类的已知问题,因此 Rails 自动为每个复选框放置 2 个复选框 HTML 元素,一个隐藏的仅在复选框被选中时处理。
我在这里处理的不是复选框,而是隐藏的输入文本字段。
我实现的解决方案是直接在控制器的 UPDATE 操作中操作 params 哈希,如下所示:
params[:series][:time_slots_attributes].each { |k,v| v[:exdates] ||= [] }
这被认为是代码气味吗?
我是否应该添加一个额外的隐藏字段,该字段已禁用并且仅在用户删除最后一个成员时才启用?这个解决方案也很有效,但对我来说似乎很笨拙。