Advertisement
saasbook

database_abuses.rb

Apr 2nd, 2012
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.74 KB | None | 0 0
  1. # assumes class Moviegoer with has_many :favorite_movies, :class_name => 'Movie'
  2.  
  3. # in controller method:
  4. @fan = Moviegoer.find_by_email(email) # causes table scan if no index on email
  5.  
  6. # in view:
  7. - @fan.favorite_movies.each do |movie|
  8.   // BAD: each time thru this loop causes a new database query!
  9.   %p= movie.title
  10.  
  11. # better: eager loading of the association in controller
  12. @fan = Moviegoer.find_by_email(email, :include => :favorite_movies)
  13. # now we have preloaded all the associated movies
  14.  
  15. # in view:
  16. - @fan.favorite_movies.each do |movie|
  17.   // GOOD: this code no longer causes additional queries
  18.   %p= movie.title
  19.  
  20. # BAD: preload association but don't use it in view:
  21. %p= @fan.name
  22. // BAD: we never used the :favorite_movies that were preloaded!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement