Rails 请问 Rails class (指 model) 的生命周期是什么样的?

lmorenbit · 2014年09月11日 · 最后由 saiga 回复于 2014年09月11日 · 2497 次阅读

问题描述: 其中 Category 字段:id, name, slug(为英语的标识符) Tag 字段:id, name, category_id

class Tag
  Category.all.each do |c|
    scope c.slug.to_sym, -> {where(category_id: c.id)}
  end
end

我在访问第一次,访问TagsController#index的时候,Category会查询一次数据库。这是没问题的。但是当我刷新页面,或者跳到其它页面再次返回这个页面的时候,并不会查询数据库(从rails s 的 log 是没有看到有查询),这应该是 Rails 做 cache 的原因。

请教:实例变量的生命周期是很明显的。那么 class(指 model)的生命周期是什么样的呢?

谢谢!

这个不是 cache,而是 oop 基础 ruby 的 classloader 在装载入内存时会初始化类的类变量,方法,执行类静态代码(块),把初始化后的类放入堆中,这个是初始化时完成的操作,当类进入内存之后就直接从堆里面拿了。


好吧,事实上我没找到任何关于 rvm 原理的文章,看看就好

#1 楼 @saiga 如果是按照你的解释,如果我添加一条 Category,那是其实是不会找到这个类方法 (scope) 了?

#2 楼 @lmorenbit 对啊,你说的现象就是答案

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