首页 > 解决方案 > 将布尔值另存为 null

问题描述

dp1具有三种可能的状态truefalsenull。我想另存dp1null. 这是根据日志正确完成的,但它被保存为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

标签: ruby-on-rails

解决方案


只有空字符串或nil值被强制转换为nil. 请检查布尔类型文档以获取活动记录。

您将必须检查“nil”字符串并将其转换为控制器级别的空字符串或 nil 值。像这样的东西:

def update
  .....
  data = params.require(: equipment).permit(:title, :dp1).to_h
  data[:dp1] = '' if data[:dp1] == 'nil'
  .....      
end

推荐阅读