ruby-on-rails Rails中的布尔字段未更新

wko9yo5t  于 2023-01-27  发布在  Ruby
关注(0)|答案(2)|浏览(139)

我正在建立一个基本的crud应用程序;使用我的控制器更新task的方法如下:-

def update
    @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

Tasks具有布尔字段completed

create_table "tasks", force: :cascade do |t|
  t.string "title"
  t.text "content"
  t.string "createdby"
  t.datetime "createdat", precision: 6
  t.boolean "completed"
  t.datetime "created_at", precision: 6, null: false
  t.datetime "updated_at", precision: 6, null: false
end

问题是,当我尝试更新任务时,completed之外的所有字段都得到更新。将completed更新为false会成功提供Task updated message,但无论我更改多少次,布尔字段的值都会恢复为true
另外,我正在将字段completed作为参数传递。
下面是呈现布尔字段completed的复选框的视图:-

<div class="form field-group">
    <%= form.check_box :completed, { class: "class-name", style: "style"}, "checked-value", "unchecked-value" %> Completed
</div>

我是完全新的ROR &任何帮助将不胜感激。
尝试从控制台更新任务,如下所示:-
=> Task.last.update(:completed => false).save
更新,但每次从浏览器用户界面更新时恢复为true

h43kikqp

h43kikqp1#

复选框的值显示为"checked-value", "unchecked-value",因此选中该复选框时,它将返回"checked-value""unchecked-value"字符串。由于这两个字符串都是字符串,它们的计算结果为true。请将它们更改为truefalse

<%= form.check_box :completed, { class: "class-name", style: "style"}, "true", "false" %> Completed
vnjpjtjt

vnjpjtjt2#

<%= form.check_box :completed, { class: "class-name", style: "style"}, "checked-value", "unchecked-value" %>

如果未选中此复选框,则服务器将接收"unchecked-value"作为completed的值。此值仍将计算为true。您可以在控制台中执行以下操作来尝试此操作:

> task = Task.new
> task.completed = "unchecked-value"
> puts task.completed
true

默认未选中值为“0”,这将给予预期行为。

> task.completed = "0"
> puts task.completed
false

除非您有理由使用“unchecked-value”,否则修复方法就是使用默认值:

<%= form.check_box :completed, { class: "class-name", style: "style"} %>

相关问题