精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-06
焕然大悟,楼主在对数组变量调用People的属性方法。不报错才怪,要这样:
p = Person.first(:conditions => "sex=boy") p.level 除非Rails3智能到判断返回的数组只有一条记录时,自动将数组转换为People对象,否则楼主的写法必然报错。 |
|
返回顶楼 | |
发表时间:2011-09-06
我也在想返回的是数组……p.level会有东西才奇怪了
|
|
返回顶楼 | |
发表时间:2011-09-06
你可以再console中,用.class方法查看一下你所写的语句返回的到底是什么。
|
|
返回顶楼 | |
发表时间:2011-09-06
find是找出来的是一条,where找出来的是一堆
|
|
返回顶楼 | |
发表时间: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 系。 |
|
返回顶楼 | |
发表时间:2011-10-05
最后修改:2011-10-05
写成下面的就行了
Person.where("sex= 'boy'") 干嘛写那么麻烦 |
|
返回顶楼 | |
发表时间:2011-10-18
为什么写成
where(:sex => 'boy') 而不是 where("sex= 'boy'") 呢…… |
|
返回顶楼 | |