Rails ActiveRecord unscoped 一定要用 block 的写法?

allenwei · 2012年01月29日 · 最后由 yakjuly 回复于 2012年11月03日 · 4177 次阅读
Article.create :title => "test"
Article.unscoped #=>  1 record
Article.create :title => "test"
Article.unscoped #=>  still 1 record

看最下面的评论 http://apidock.com/rails/ActiveRecord/Base/unscoped/class

如果不用 unscoped 的 block 写法,结果会被缓存住,巨大的陷阱啊, 大家遇到过这个问题么?

没遇到过这个问题呢...

btw: @allenwei 你的代码应该是 Article.unscoped.all 吧?

#1 楼 @poshboytl Article.unscoped.allArticle.unscoped 是一样的,而且unscoped后面跟scope的话也会被缓存住

Article.unscoped.reload 会强制从数据库中重新读取

#2 楼 @allenwei 啊,被 @camel 顶上来,确实是要用 block,我已经遇到过这个陷阱了.... >.<

个人觉得不应该用 reload 解决这个问题...

#4 楼 @poshboytl 之前发现的,现在我都忘记这个东西了

@allenwei 刚才试了下 Article.unscoped 果然是会被缓存住。但是 经过测试 “unscoped 后面跟 scope 的话也会被缓存住” 不对。 经过测试: Role.unscoped.where(:used_for => "organization") 在创建一挑新的 Role 记录后,还是会执行 SQL 读取最新数据的。

这种语法我一直没用过,我一直都是 Role.where 的方法。unscoped 有啥特别的地方吗?

去除 default_scope

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