Rails模型中的类变量VS常量

时间:2012-04-20 06:01:58

标签: ruby-on-rails ruby ruby-on-rails-3

在我的应用程序中,只有一个当前事件默认为最近的日期事件。我需要在各个地方检索此事件,因为它没有改变,所以缓存它是有意义的。有两种方法可以让我知道:

class Event < ActiveRecord::Base

  CURRENT_EVENT = Event.where('starts_on >= ?', Time.now).
                  order('starts_on ASC').limit(1).first

  # OR

  def self.current_event
    @@current_event ||= Event.where('starts_on >= ?', Time.now).
                      order('starts_on ASC').limit(1).first
  end

end

哪一个最好?还是其他任何选择?我知道不推荐使用@@类变量,因为它们不是线程安全的。

2 个答案:

答案 0 :(得分:1)

我猜你的方法不对:这样你的应用就会永远保持你的缓存价值。新的events不会影响它,这是完全错误的。可能是某些事件已经过去但仍然被缓存为“当前”的情况。

顺便说一句:limit(1).first与唯一的first相同。

答案 1 :(得分:1)

第一种方法和第二种方法都不正确。如果你定义常量 - 它将在Rails初始化过程时间找到Event,实际上。第二种方法不会cache您的记录。 至于我,这不是那么数据缓存。