论坛首页 编程语言技术论坛

ActiveRecord中Find与Where区别

浏览 10406 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-06  
焕然大悟,楼主在对数组变量调用People的属性方法。不报错才怪,要这样:

p = Person.first(:conditions => "sex=boy")  
p.level  

除非Rails3智能到判断返回的数组只有一条记录时,自动将数组转换为People对象,否则楼主的写法必然报错。
0 请登录后投票
   发表时间:2011-09-06  
我也在想返回的是数组……p.level会有东西才奇怪了
0 请登录后投票
   发表时间:2011-09-06  
你可以再console中,用.class方法查看一下你所写的语句返回的到底是什么。
0 请登录后投票
   发表时间:2011-09-06  
find是找出来的是一条,where找出来的是一堆
0 请登录后投票
   发表时间:2011-09-21  
楼主大概弄错了,find这个method一般仅在直接查ID时是直接返回对象的(其它时候只要不传入first,返回的都是 Array):
> Person.find 1
=> #<Person id: 1, name: \"person 1\", created_at: \"2011-09-20 14:46:12\", updated_at: \"2011-09-20 14:46:12\">
这种情况等价的where语句可以是 Person.where(:id => 1).first,优点是即使找不到也不会抛异常,缺点是有些罗嗦。

再说两种api的区别:where找出来的不是一堆,是一个relation,但是这里有个trick:在rails console中如果执行 where ,最后会被inspect,而relation的insepect方法就是要真正执行查询了。

在controller代码中,导致relation对象真实发生查询的method一般包括 first,each,all等等,一句话,where这种新机制的价值就是仅仅在必须时才查询数据库,通常认为 where 系优于 find 系。
3 请登录后投票
   发表时间:2011-10-05   最后修改:2011-10-05
写成下面的就行了

Person.where("sex= 'boy'")

干嘛写那么麻烦
0 请登录后投票
   发表时间:2011-10-18  
为什么写成
where(:sex => 'boy') 
而不是
where("sex= 'boy'")
呢……
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics