ruby-on-rails-4 – 带有rails活动记录的sqlite boolean’t’和
发布时间:2020-12-17 03:06:52 所属栏目:百科 来源:网络整理
导读:我在开发时使用 mysql on production和sqlite3. 在开发时查询我的数据库,例如 @follow_ups = FollowUp.where(is_complete: false) 我在控制台中获得了下面的sql SELECT "follow_ups".* FROM "follow_ups" WHERE "follow_ups"."is_complete" = 'f' sqlite将’
我在开发时使用
mysql on production和sqlite3.
在开发时查询我的数据库,例如 @follow_ups = FollowUp.where(is_complete: false) 我在控制台中获得了下面的sql SELECT "follow_ups".* FROM "follow_ups" WHERE "follow_ups"."is_complete" = 'f' sqlite将’f’计算为truthy值,因此不返回follow_ups.is_complete = false.在数据库中,它们存储为true / false.从我的调查中我发现. https://github.com/rails/rails/issues/10720 我该怎么做才能使我的布尔过滤器工作?我原本以为这会发生在更多人身上. 见下面的架构 create_table "follow_ups",force: true do |t| t.integer "contact_id" t.integer "owner_id" t.datetime "due_date" t.string "comment" t.boolean "is_complete",default: false t.integer "created_by_user_id" t.integer "updated_by_user_id" t.datetime "created_at" t.datetime "updated_at" end 查看下面的数据和插入 – 通过rails控制台完成.作为评论中的要求. [30] pry(main)> FollowUp.create(contact_id: 1,due_date: Time.now,is_complete: true) (0.1ms) begin transaction SQL (0.4ms) INSERT INTO "follow_ups" ("contact_id","created_at","due_date","is_complete","updated_at") VALUES (?,?,?) [["contact_id",1],["created_at","2014-04-22 19:17:01.854402"],["due_date","2014-04-22 19:17:01.853540"],["is_complete","t"],["updated_at","2014-04-22 19:17:01.854402"]] (1.7ms) commit transaction #<FollowUp:0x0000010699c5a8> { :id => 23,:contact_id => 1,:owner_id => nil,:due_date => Tue,22 Apr 2014 19:17:01 UTC +00:00,:comment => nil,:is_complete => true,:created_by_user_id => nil,:updated_by_user_id => nil,:created_at => Tue,:updated_at => Tue,22 Apr 2014 19:17:01 UTC +00:00 } [31] pry(main)> FollowUp.where(is_complete: true) FollowUp Load (0.3ms) SELECT "follow_ups".* FROM "follow_ups" WHERE "follow_ups"."is_complete" = 't' #<ActiveRecord::Relation [#<FollowUp id: 16,contact_id: 1,owner_id: 1,due_date: "2014-04-23 00:00:00",comment: "Lorem ipsum dolor sit amet,consectetur adipisicin...",is_complete: true,created_by_user_id: 1,updated_by_user_id: 1,created_at: "2014-04-17 09:57:00",updated_at: "2014-04-22 14:37:36">,#<FollowUp id: 23,owner_id: nil,due_date: "2014-04-22 19:17:01",comment: nil,created_by_user_id: nil,updated_by_user_id: nil,created_at: "2014-04-22 19:17:01",updated_at: "2014-04-22 19:17:01">]> [32] pry(main)> FollowUp.where(is_complete: false) FollowUp Load (0.2ms) SELECT "follow_ups".* FROM "follow_ups" WHERE "follow_ups"."is_complete" = 'f' #<ActiveRecord::Relation []> [33] pry(main)> FollowUp.all FollowUp Load (0.2ms) SELECT "follow_ups".* FROM "follow_ups" #<ActiveRecord::Relation [#<FollowUp id: 16,#<FollowUp id: 17,due_date: "2014-04-24 00:00:00",comment: "This ia long comment",is_complete: false,created_at: "2014-04-17 10:04:13",updated_at: "2014-04-17 10:04:13">,#<FollowUp id: 18,comment: "This is a commentrn",created_at: "2014-04-17 10:24:05",updated_at: "2014-04-17 10:24:05">,#<FollowUp id: 19,comment: "test",created_at: "2014-04-22 13:37:40",updated_at: "2014-04-22 13:37:40">,#<FollowUp id: 20,created_at: "2014-04-22 13:37:41",updated_at: "2014-04-22 13:37:41">,#<FollowUp id: 21,created_at: "2014-04-22 13:39:20",updated_at: "2014-04-22 13:39:20">,#<FollowUp id: 22,contact_id: 2,due_date: "2014-04-30 00:00:00",created_at: "2014-04-22 13:53:37",updated_at: "2014-04-22 13:53:37">,updated_at: "2014-04-22 19:17:01">]> 解决方法
在sqlite3中,不支持布尔值.因此rails使用char’t’和’f’来表示布尔值true和false.而在其他数据库如mysql,postgresql中,使用真实的布尔值true和false.
但是,这种差异对rails Model是透明的.你可以使用 FollowUp.where(is_compete: true) 过滤完成的后续和 FollowUp.where(is_compete: false) 得到不完整的后续行动 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |