如何为Rails的check_box_tag设置非nil的未选中值?
在Rails中为check_box_tag设置非nil的未选中值
默认情况下,未选中的check_box_tag不会被浏览器提交到后端,所以你拿到的参数值是nil。要把未选中时的值设为nil以外的内容(比如你的示例里的'false'),需要配合hidden_field_tag来实现,这是Rails里的标准做法:
# 先添加同名隐藏字段,定义未选中时提交的值 hidden_field_tag :active, 'false' # 再添加复选框,定义选中时提交的值 check_box_tag :active, 'true', @your_model.active?
原理说明:
- 当复选框未选中时,浏览器只会提交前面的隐藏字段,后端拿到的
params[:active]就是'false' - 当复选框选中时,浏览器会同时提交隐藏字段和复选框的值,Rails解析参数时会取最后一个值(即复选框的
'true'),自动覆盖隐藏字段的内容
注意你示例里的写法check_box_tag :active, ['true', 'false'], ...是错误的,check_box_tag的第二个参数是复选框选中时要提交的值,不能传入数组。
内容的提问来源于stack exchange,提问作者kernification
相关产品推荐
相关产品推荐

