2012-07-12 63 views
1

所以,如果我做的:爲什麼activerecord沒有找到空列的記錄?

>> User.where("facebook_data IS null") 
(0.5ms) SELECT COUNT(*) FROM `users` WHERE (facebook_data IS null) 
=> [] 

如果還沒有,我期待我的用戶賬號:

>> u = User.find(225) 
=> #<User id: 225, email: "[email protected]", ...etc> 
>> u.facebook_data 
=> nil 

所以我很清楚沒有facebook_data。爲什麼當我使用where子句時這個記錄不會出現?

+1

你嘗試過'User.where(:facebook_data => nil)'? – 2012-07-12 00:03:15

+0

是的,我得到了相同的結果 - 我需要能夠得到相反的結果,因此爲什麼我做的是null,我也需要做IS NOT NULL ...所以,如果我這樣做:User.where (「facebook_data IS NOT NULL」)。map {| u |你是否u.facebook_data.nil? } .compact ---然後我得到我的用戶!所以..認真的東西在這裏完全破碎了。 – patrick 2012-07-12 00:14:53

回答

1

確定,所以要查個水落石出,我去到MySQL:

mysql> select users.facebook_data from users WHERE users.id = 225; 
+---------------+ 
| facebook_data | 
+---------------+ 
| --- 
     | 
+---------------+ 
1 row in set (0.00 sec) 

然後在控制檯..

> User.find(225).facebook_data == nil 
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 225 LIMIT 1 
=> true 

所以...... ActiveRecord的莫名其妙放「 - - 「在列中而不是」NULL「......並且ActiveRecord將」---「識別爲null,但是mysql不同意。

+2

我懷疑你正在序列化你的'facebook_data'列:) – sikachu 2012-07-12 00:37:48

相關問題