ActiveResource модели + подметальные машины - PullRequest
0 голосов
/ 09 декабря 2011

Я только начал работать с ActiveResource и решил кэшировать несколько битов модели, чтобы не переставать работать с API. Хорошо, хорошо.

Я изучил устаревшие кеши и решил внедрить свипер (чего мне еще не приходилось делать). Это не работает.

AR модель:

class Myresource < ActiveResource::Base
  extend ActiveModel::Callbacks
  define_model_callbacks :update

  "stuff"

  def current
    Rails.cache.fetch("/key/#{self.id}", :expires_in => 5.minutes) do
      Myresource.find(ID)
    end 
  end

end

Sweeper:

class MyresourceSweeper < ActionController::Caching::Sweeper
  observe Myresource

  def after_update(myresource)
    expire_cache_for_myresource
  end

private
  def expire_cache_for_myresource
    Rails.cache.delete '/key/myresource.id'
  end
end

Контроллер:

cache_sweeper :myresource_sweeper

Так что, немного поработав с AR, кешами и Sweepers, я не могу понять, где искать различные комбинации вещей. Я могу установить и истечь из консоли ресурс, но в приложении устанавливается кеш, но я ничего не делал, вызывая удаление.

Предложения

1 Ответ

1 голос
/ 09 декабря 2011

Код, который вы опубликовали, содержит опечатку. Я в некотором роде сомневаюсь, что это ваша настоящая проблема, но для чего бы это ни стоило, я думаю, вы хотели написать свою уборочную машину следующим образом:

class MyresourceSweeper < ActionController::Caching::Sweeper
  observe Myresource

  def after_update(myresource)
    expire_cache_for_myresource(myresource)
  end

  private
  def expire_cache_for_myresource(myresource)
    Rails.cache.delete "/key/#{myresource.id}"
  end
end

например. в исходном коде, который вы разместили, вы не передавали ресурс в метод expire_cache_for_my_resource, и поэтому снова и снова истекали один и тот же статический ключ.

...