You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:45:48