Я разрабатываю систему (с 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
не работает? Кроме того, есть ли лучший подход?