`

Rails:小心_destroy的autocomplete

阅读更多

在Rails的嵌套表单中, 如果在model的accepts_nested_attributes_for后加入了:allow_destroy => true ,就可一通过在表单中提交一个_destroy,来控制是否删除嵌套属性。(嵌套表单


问题出现在这样一个场景:
1、用户在编辑一个相册,删除了一些照片(并没有真正的删除,只是把_destroy隐藏域设置为true,并且隐藏了这些照片。如果此时提交,那么这些照片将被真正删除),但是,没有保存,而是点击了取消。
2、然后他点击浏览器“后退”按钮,又返回到编辑页面,浏览器缓存会让页面看起来和用户取消编辑前一样。有些照片被隐藏了。
3、刷新页面,那些被隐藏的照片又回来了。用户修改了一下相册的描述。保存。
4、然后发现,在步骤1中删除的那些照片被删掉了。

 

 原来,这是浏览器的自动填充功能(autocomplete)搞得鬼。在步骤1的时候浏览器记住了每个_destroy的值,又在步骤3中帮你填好了。

 

解决办法:

<%= f.hidden_field :_destroy, :autocomplete => 'off' %>

 

autocomplete这个属性,之前并不是HTML标准,只是浏览器都支持。直到HTML5才成为标准。它对所有的表单域都有效。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics