看板 Ruby 關於我們 聯絡資訊
# 環境 # 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
godfat:http://www.sqlite.org/faq.html#q3 他允許你任意存 data 09/12 21:50
godfat:所以這邊 't' 確實不等同於 'true' ... @@ 09/12 21:50
JohnDoe:終於知道原因了 多謝! 看來用sqlite自己皮要繃緊一點@_@ 09/13 00:42
godfat:我也滿詫異會是這樣的原因... @_@ sqlite 看來確實不適合 09/13 00:51
godfat:production, 或是不適合比較複雜的 application. 09/13 00:51