2012-07-12 64 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

相关问题