Rails method_missing и кэширование классов activerecord - PullRequest
0 голосов
/ 14 марта 2011

Мы используем method_missing для загрузки атрибутов из сериализованного хэша.Например, с учетом модели:

model = { :name => 'name',
          :options => { :title => 'title',
                        :custom_field => 'field1',
                        :custom_field => 'field2' } }

и урезанной версии нашей method_missing (она делает некоторые другие вещи, чтобы проверить, разрешена ли опция, и, конечно, вызывает super, если опция не 't найдено):

def method_missing(method, *args)
  self.options[method]
end

затем атрибут получается с помощью model.custom_field

В среде разработки это работает для загрузки первой страницы, но любые последующие ошибки загрузки страницы выполняются с помощью "неопределенного метода"'custom_field' ".

Я думаю, что я читал, что это проблема с кэшированием классов activerecord, но у меня возникают проблемы с поиском того, где я видел это раньше.способ решить эту проблему?

1 Ответ

0 голосов
/ 14 марта 2011

Вместо значения self.options используйте переменную экземпляра для хранения хеша и возврата из него.

def method_missing(method, *args)
    return @serialized_hash[method] if @serialized_hash.include?(method)
    super
end

Это не ActiveRecord, который кэширует классы, это Rails. Это происходит в производственной среде. В процессе разработки он будет перезагружать ваши модели при каждом запросе и, таким образом, перезаписывать любые изменения во время выполнения, сделанные вами в предыдущем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...