ruby-on-rails - 将布尔值另存为 null
问题描述
dp1
具有三种可能的状态true
、false
和null
。我想另存dp1
为null
. 这是根据日志正确完成的,但它被保存为true
我的数据库中没有默认值。
Started PATCH "/equipments/2" for 127.0.0.1 at 2018-08-01 11:49:23 +0200
Processing by EquipmentsController#update as JS
Parameters: {"utf8"=>"✓", "equipment"=>{"title"=>"TV ", "dp1"=>"nil"}, "commit"=>"Save", "id"=>"2"}
Equipment Load (0.1ms) SELECT "equipment".* FROM "equipment" WHERE "equipment"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
↳ app/controllers/equipments_controller.rb:124
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 3], ["LIMIT", 1]]
↳ /Users/Mesnet/.rvm/gems/ruby-2.5.1/gems/orm_adapter-0.5.0/lib/orm_adapter/adapters/active_record.rb:17
(0.0ms) begin transaction
↳ app/controllers/equipments_controller.rb:81
Equipment Update (0.4ms) UPDATE "equipment" SET "dp1" = ?, "updated_at" = ? WHERE "equipment"."id" = ? [["dp1", 1], ["updated_at", "2018-08-01 09:49:23.413563"], ["id", 2]]
↳ app/controllers/equipments_controller.rb:81
(0.7ms) commit transaction
↳ app/controllers/equipments_controller.rb:81
Rendering equipments/js/create.js.erb
Rendered equipments/js/create.js.erb (0.4ms)
Completed 200 OK in 31ms (Views: 26.0ms | ActiveRecord: 1.5ms)
如何强制保存我的值,就像null
表单一样null
?
解决方案
只有空字符串或nil
值被强制转换为nil
. 请检查布尔类型文档以获取活动记录。
您将必须检查“nil”字符串并将其转换为控制器级别的空字符串或 nil 值。像这样的东西:
def update
.....
data = params.require(: equipment).permit(:title, :dp1).to_h
data[:dp1] = '' if data[:dp1] == 'nil'
.....
end
推荐阅读
- node.js - Angular 7 HttpClient get - 你可以访问和处理返回对象吗?
- openscad - how to import an image into openjscad
- ios - Can not add iOS bundle identifier
- ruby-on-rails - build step 0 "gcr.io/google-appengine/exec-wrapper:latest" failed: exit status 1
- java - How to check if current phones date is today or not
- excel-formula - 如何让 VLookup 为不在 Excel 2010 列表中的条目返回零?
- python - 如何从具有特定度数的节点创建 NetworkX 子图?
- javascript - 对类使用泛型类型
- azure-devops - Visual Studio Teams API giving 203 for 1 company
- sql - SQLITE3 查询 COUNT 和 ORDER BY