Rails 请教 scope 的问题

benyu · July 30, 2014 · Last by tumayun replied at July 31, 2014 · 1998 hits

定义了一个 Catalog 的 Model 其中有个

scope :about, ->{find_by(slug: 'about')}

为什么执行出来的结果是不确定的,即有时候执行一条 SQL,有时候执行二条 SQL(在 console 中看到这样情况):

2.0.0-p0 :010 > Catalog.about
  Catalog Load (0.3ms)  SELECT `catalogs`.* FROM `catalogs` WHERE `catalogs`.`slug` = 'about' ORDER BY `catalogs`.`id` ASC LIMIT 1
  Catalog Load (0.2ms)  SELECT `catalogs`.* FROM `catalogs`

结果是返回全部的 catalog 内容,如果我直接在 console 运行

.0.0-p0 :007 > Catalog.find_by(slug: 'abount')
  Catalog Load (0.4ms)  SELECT `catalogs`.* FROM `catalogs` WHERE `catalogs`.`slug` = 'abount' LIMIT 1
 => nil

这是什么情况?谢谢

Catalog.find_by(slug: 'abount') 这里字符串打错了!!! abount??????????

好吧,是打错了,但是也不应该执行二条 SQL 吧?应该是找不到相应的记录才对,是不是? 谢谢!

scope 执行结果为 nil 的话会返回所有的值,使用时得注意

@dddd1919 Really? 不会吧!!!

scope 里面可能 not found 的话是危险的,这种写成方法就好了,为嘛用 scope. 返回 all 是不是为了 scope 的衔接?比如 Post.scope1.scope2.scope3?

@saiga 这算 bug 了吧。为了链式调 用也不能返回 all 啊,应该 none 才对呀. 赶紧提 pull request. 还有,我觉得这种返回 1 个对象的查询,就不要用 scope 了,定义 method 吧。

You need to Sign in before reply, if you don't have an account, please Sign up first.