Advertisement
saasbook

database_abuses.rb

Jan 10th, 2012
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.76 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. @movies = @fan.favorite_movies
  15.  
  16. # in view:
  17. - @fan.favorite_movies.each do |movie|
  18.   // GOOD: this code no longer causes additional queries
  19.   %p= movie.title
  20.  
  21. # BAD: preload association but don't use it in view:
  22. %p= @fan.name
  23. // BAD: we never used the @movies that were preloaded!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement