Rails缓存类变量

时间:2014-11-20 16:50:10

标签: ruby-on-rails

我有一个模型,我想在其中实现范围跟踪功能(例如,已应用了哪些范围),我需要这个以便有条件地应用另一个范围。因此,我决定在类级别创建一个实例变量,该变量将包含与范围名称对应的符号数组。每次应用范围时,其符号都会被推入数组中。所以问题是我期望在每个请求上初始化数组。但据我所知,rails缓存所有类(仍然关闭cache_classes选项),这会导致数组内容在请求之间保存的行为,因此当我更改要应用的范围时(它们)有条件地应用,取决于GET参数),我在该数组中找到旧的范围符号,而不是新的范围符号。也许在几次请求后我可以看到新结果,但它是随机发生的。所以我的假设代码如下:

class Apple < ActiveRecord::Base
  @scopes = []
  def self.scopes
    @scopes
  end

  scope :green, -> { scopes << :green }
end

我尝试了不同的变量组合(类变量,类实例变量,在本征类上定义访问器和变量,也许是其他东西 - 我不记得了),尝试创建数组副本或使用{创建数组{1}}方法,但没有运气。

1 个答案:

答案 0 :(得分:0)

似乎你可以在before_filter中清除这个数组

class ApplicationController
  before_filter :clear_scope_history

  private

  def clear_scope_history
    Apple.scopes.clear
    # Banana.scopes.clear
    # etc.
  end
end

顺便说一句,scopes对于您的方法名称来说是一个糟糕的选择。可能会覆盖ActiveRecord中的一个。将其重命名为scope_usage_history或类似的内容。

相关问题