我正在建立一个基本的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
2条答案
按热度按时间h43kikqp1#
复选框的值显示为
"checked-value", "unchecked-value"
,因此选中该复选框时,它将返回"checked-value"
或"unchecked-value"
字符串。由于这两个字符串都是字符串,它们的计算结果为true
。请将它们更改为true
和false
。vnjpjtjt2#
如果未选中此复选框,则服务器将接收
"unchecked-value"
作为completed的值。此值仍将计算为true。您可以在控制台中执行以下操作来尝试此操作:默认未选中值为“0”,这将给予预期行为。
除非您有理由使用“unchecked-value”,否则修复方法就是使用默认值: