[RoR ] (地雷) ActiveRecord & Sqlite 對 boolean 的處理

看板Ruby作者 (不務正業)時間17年前 (2008/09/12 21:27), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串1/1
# 環境 # OS: Windows XP # Ruby 1.8.6 # Rails 2.1 # Sqlite 3.5.6 1. 先用 Migration 建立資料表,在 Sqlite3 看到的 schema 為: CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "alive" boolean NOT NULL); 2. 利用 sqlite3.exe 從外部檔案 load.sql 插入資料: load.sql: ... INSERT INTO users (name, alive) VALUES ('john', 'false'); INSERT INTO users (name, alive) VALUES ('bob', 'true'); INSERT INTO users (name, alive) VALUES ('robert', 'true'); ... 3. 在 console 中列出所有的人: >> User.find(:all) => [..., #<User id: 3, name: "john", alive: true>, ...] 4. 在 console 中列出還活著的人: >> User.find(:all, :conditions => {:alive => true}) => [] 啥!!居然一個都沒有!! 後來找出問題出在哪邊已經是兩個小時後了 囧rz... 解答: 先是用 log 找出 ActiveRecord 轉換的 SQL 語法: User.find(:all, :conditions => {:alive => true}) -> SELECT * FROM "users" WHERE ("users"."alive" = 't') 把同樣的句子放在 sqlite3.exe command line 下的確是查不到, 不過換成這樣就可以...... (真是讓人很無力阿~) SELECT * FROM "users" WHERE ("users"."alive" = 'true') 結局: 把 load.sql 中的 'true' 改成 't',問題就很愉快(?)的解決了 -- 有沒有人遇過類似機車的問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.233.128.40

09/12 21:50, , 1F
http://www.sqlite.org/faq.html#q3 他允許你任意存 data
09/12 21:50, 1F

09/12 21:50, , 2F
所以這邊 't' 確實不等同於 'true' ... @@
09/12 21:50, 2F

09/13 00:42, , 3F
終於知道原因了 多謝! 看來用sqlite自己皮要繃緊一點@_@
09/13 00:42, 3F

09/13 00:51, , 4F
我也滿詫異會是這樣的原因... @_@ sqlite 看來確實不適合
09/13 00:51, 4F

09/13 00:51, , 5F
production, 或是不適合比較複雜的 application.
09/13 00:51, 5F
文章代碼(AID): #18ocvQqj (Ruby)
文章代碼(AID): #18ocvQqj (Ruby)