欢迎大家来这里坐坐, RubyOnRails话吧
( http://www.3user.com/group/index/12015 )
做个测试,建个表
CREATE TABLE user(
id INT NOT NULL AUTO_INCREMENT,
user_name varchar NOT NULL
)
test的fixtures
这么写
one:
id: 1
user_name: a
two:
id: 2
user_name: b
然后在user_test.rb中写一个测试方法如下:
def test_find
p User.find(:first,:conditions =>["id=?", 2]).id #正确的写法
p User.find(:first,["id=?", 2]).id #错误的写法
end
打印出来的结果
2 #正确的结果
1 #与预期不一样的结果
查看日志如下:
Nov 04 20:03:58 13cc97e4810e43f rails[3076]: [4;36;1mUser Load (0.000000)[0m [0;1mSELECT * FROM user WHERE (id=2) LIMIT 1[0m
Nov 04 20:03:58 13cc97e4810e43f rails[3076]: [4;36;1mUser Load (0.000000)[0m [0;1mSELECT * FROM user LIMIT 1[0m
错误已经很明显了,如果不写":conditions:=>",前面查询有:first,则会忽略后面写的条件.
我犯过几次这样的错误了,怎么看都查不出问题,程序也不报错。
特写此文,纪念一下曾经让我郁闷的code.
欢迎大家来这里坐坐, RubyOnRails话吧
( http://www.3user.com/topic/show/12462 )