Что вы можете сделать, это добавить этот метод к Donation
:
# Donation.rb
def completed?
self.donation_status.name == 'completed' ? true : false
end
А затем просто выполните my_donation.completed?
.Если это вызывается во второй раз, Rails будет искать в кеше, а не в БД.
Вы можете добавить memcached, если хотите, или использовать кеширование Rails дальше, и выполнить:
def completed?
return Rails.cache.fetch("status_#{self.donation_status_id}_complete") do
self.donation_status.name == 'completed' ? true : false
end
end
То, что это будет делать, это создать хеш-ключ, называемый (например) «status_1_complete», и, если он не был определен в первый раз, оценит блок и установит значение.В противном случае он просто вернет значение.Таким образом, если у вас было 1 000 000 000 пожертвований, и у каждого из них было donation_status 1, оно попадало бы прямо в кэш.memcached довольно быстрый и популярный.