Rails Snippet: Caching expensive calls
source link: https://www.devroom.io/2008/04/09/rails-snippet-caching-expensive-calls/?utm_campaign=Feed%3A+ariejan+%28ariejan%7Cdevroom.io%29
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Rails Snippet: Caching expensive calls
Posted:
2008-04-09
- Last updated:
2019-06-05
Tagged general rubyonrails ruby rails snippet
In Rails, from time to time, you may encounter you have a method you call several times, but which returns always the same result. For example, have the following:
class Person < ActiveRecord::Base
has_many :articles
def get_approved_articles
self.articles.find(:all, :conditions => {:approved => true}, :order => 'approved_on DESC')
end
end
A query is fired every time you call Person#get_approved_articles. To cache the result of the query during this request, just add a bit of magic
class Person < ActiveRecord::Base
has_many :articles
def get_approved_articles
@approved_articles ||= self.articles.find(:all, :conditions => {:approved => true}, :order => 'approved_on DESC')
end
end
This will return the @approved_articles value if it exists. If it doesn’t, which is the first time you access the method, the query is run and stored in @approved_articles for later use.
Note: I know it’s much easier to define this kind of behaviour, but it’s just an illustration.
class Person < ActiveRecord::Base
has_many :articles
has_many :approved_articles, :class_name => "Article", :conditions => {:approved => true}, :order => 'approved_on DESC'
end
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK