1

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

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

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

4

2 回答 2

1

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

于 2012-04-20T08:10:47.467 回答
1

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

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

于 2012-04-20T06:25:45.477 回答