[RoR ] (地雷) ActiveRecord & Sqlite 對 boolean 的處理
# 環境
# 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
09/12 21:50, 1F
→
09/12 21:50, , 2F
09/12 21:50, 2F
→
09/13 00:42, , 3F
09/13 00:42, 3F
推
09/13 00:51, , 4F
09/13 00:51, 4F
→
09/13 00:51, , 5F
09/13 00:51, 5F
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章