使用find初始化常量?

ez.*_*ez. 0 ruby-on-rails

像这样的东西:

类别

   SOME_CATEGORY = find_by_name("some category")
Run Code Online (Sandbox Code Playgroud)

结束

分类:: SOME_CATEGORY
尝试没有问题,但想知道这是不是一个坏主意,以及原因,如果有的话..

谢谢

rya*_*anb 6

如果您不希望每次必须缓存模型时都访问数据库.有几种方法可以做到这一点,但一种快速方法是使用Memoization.这是在Rails 2.2中引入的.

class Category < ActiveRecord::Base
  class << self
    extend ActiveSupport::Memoizable
    def named(name)
      find_by_name(name)
    end
    memoize :named
  end
end
Run Code Online (Sandbox Code Playgroud)

像这样使用它.

Category.named("some category") # hits the database
Category.named("some category") # doesn't hit the database
Run Code Online (Sandbox Code Playgroud)

缓存应该跨请求保持持久性.您可以通过传递true最后一个参数来重置缓存.

Category.named("some category", true) # force hitting the database
Run Code Online (Sandbox Code Playgroud)