Rails中Task模型boolean字段completed无法更新问题求助
问题解决:Rails Task模型
completed字段无法更新为false 问题根源
你视图里的check_box方法参数设置错误,导致未选中复选框时提交的不是布尔值false,而是字符串"unchecked-value"——Ruby里非空字符串都会被判定为true,所以数据库里的completed字段始终会被设为true,这就是你看到更新成功提示,但值又变回true的原因。
Rails的check_box方法中,第三个参数是复选框选中时提交的值,第四个是未选中时提交的值,你传的自定义字符串不符合布尔字段的需求。
修复代码
把视图里的check_box代码改成下面这样,直接传入布尔值true和false:
<div class="form field-group"> <%= form.check_box :completed, { class: "class-name", style: "style" }, true, false %> Completed </div>
额外调试建议
如果还是有问题,可以在update控制器方法里加一行调试代码,确认表单提交的参数值:
def update # 临时打印参数,查看提交的completed值是什么 puts "提交的completed参数:#{params[:task][:completed]}" @task = Task.find(params[:id]) respond_to do |format| if @task.update(task_params) format.html { redirect_to task_url(@task), notice: "Task was successfully updated." } format.json { render :show, status: :ok, location: @task } else format.html { render :edit, status: :unprocessable_entity } format.json { render json: @task.errors, status: :unprocessable_entity } end end end
启动服务器后操作UI更新,看控制台输出的参数是不是布尔值true或false,这样能快速定位问题。
内容的提问来源于stack exchange,提问作者hannahSugahp
相关产品推荐
相关产品推荐

