新手问题 where ("id in 14") 和 find (14) 有什么区别?

QueXuQ · 2012年10月22日 · 最后由 QueXuQ 回复于 2012年10月25日 · 2699 次阅读
user = User.where("id in (14)")
User Load (0.9ms)  SELECT `users`.* FROM `users` WHERE (id in (14))

user = User.find(14)
User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 14 LIMIT 1

上面两行代码,和他输出的 SQL。

我想问这两个查找有什么不一样的?他们输出的结果是一样的啊。

请问这两个是一样的吗?在运行@a.people = user的时候,where 的没有问题,反而 find 的出问题了,问题如下:

NoMethodError: undefined method `each' for #<User:0xa455498>

where 返回 Array 类型 find 如果结果只有一条,返回的是 User 对象,多条才是 Array 类型

#1 楼 @huacnlee Thanks.原来有这样的差别。

where 返回的是 ActiveRecord::Relation find 返回的是单个对象。

这也是个层次的问题,ser.where("id in (14)") 直接把 sql 暴露在用户面前,试问?如果我突然数据库从 sql 迁移到 nosql,你的代码如果还想继续工作,是不是全部都要修改?

#4 楼 @iBachue 你想多了,真有那种时候,你要改的也不多这一点

#4 楼 @iBachue 我跟你想得一样

0.9 0.3 ms 的问题。。关键是谁会拿一个 id 放在 in 里面做查询。在 includes 上会生成 in 查询。在一些速度要求高的需求上,includes 满足不了,还得自己写连接查询 sql。。

#7 楼 @ruby_sky 请问你言下之意,一个查询怎么做是最好的选择?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号