Ленивая загрузка / кэширование результатов SQL-запроса с моделью - PullRequest
2 голосов
/ 29 марта 2009

Я разрабатываю систему (с Rails 2.3.2, Ruby 1.8.7-p72), которая имеет значительный компонент отчетности. Чтобы повысить производительность, я создал модель отчетов для архивации старых отчетов. Идея заключается в том, что если для произвольного набора условий уже существует соответствующий отчет, используйте его, в противном случае создайте отчет и сохраните результаты.

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

def foo
  @foo ||= read_attribute(:foo)
  if @foo.nil?
    @foo = write_attribute(:foo, (expensive SQL query result))
  end
  @foo 
end

Однако проблема, с которой я сталкиваюсь, заключается в том, что результаты неправильно записываются в мою базу данных, и в результате код постоянно переоценивает SQL-запрос.

Может кто-нибудь сказать мне, почему

write_attribute
не работает? Кроме того, есть ли лучший подход?

Ответы [ 2 ]

1 голос
/ 05 апреля 2009

Оказывается, то, что я делал, было хорошо. Реальная проблема заключалась в том, что поиск объекта «id» подавлялся фрагментом кода, который я имел в другом месте. То есть фактическая запись происходила в базу данных, но с неправильным первичным ключом.

0 голосов
/ 29 марта 2009

Вам не нужно вызывать "save" после выполнения write_attribute?

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