модуль ActiveRecord::ConnectionAdapters::QueryCache
Атрибуты
query_cache[R]
query_cache_enabled[R]
Публичные методы класса
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 9
def dirties_query_cache(base, *method_names)
method_names.each do |method_name|
base.class_eval " def #{method_name}(*)
clear_query_cache if @query_cache_enabled
super
end
", __FILE__, __LINE__ + 1
end
end Вызывает метод суперкласса
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 23
def initialize(*)
super
@query_cache = Hash.new { |h,sql| h[sql] = {} }
@query_cache_enabled = false
end Публичные методы экземпляра
Включить кэширование запросов в блоке.
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 30 def cache old, @query_cache_enabled = @query_cache_enabled, true yield ensure @query_cache_enabled = old clear_query_cache unless @query_cache_enabled end
Очищает кэш запросов.
Одна из причин, по которой вы можете явно вызвать этот метод, заключается в том, чтобы обеспечить выполнение запросов, которые запрашивают от базы данных случайные результаты. В противном случае кэш видел бы один и тот же SQL запрос и каждый раз возвращал бы тот же результат, тем самым молча подрывая ожидаемую случайность.
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 60 def clear_query_cache @query_cache.clear end
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 42 def disable_query_cache! @query_cache_enabled = false end
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 38 def enable_query_cache! @query_cache_enabled = true end
Вызывает метод суперкласса
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 64
def select_all(arel, name = nil, binds = [])
if @query_cache_enabled && !locked?(arel)
arel, binds = binds_from_relation arel, binds
sql = to_sql(arel, binds)
cache_sql(sql, binds) { super(sql, name, binds) }
else
super
end
end Отключить кэширование запросов в блоке.
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 47 def uncached old, @query_cache_enabled = @query_cache_enabled, false yield ensure @query_cache_enabled = old end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.