59
The Worst Rails Code You've Ever Seen (and how not to write it yourself) Obie Fernandez Rein Henrichs

Obie Fernandez - Worst Rails Code

Embed Size (px)

DESCRIPTION

railsconf

Citation preview

Page 1: Obie Fernandez - Worst Rails Code

The Worst Rails Code You've Ever Seen

(and how not to write it yourself)

Obie FernandezRein Henrichs

Page 2: Obie Fernandez - Worst Rails Code

RAILS FAIL

Page 3: Obie Fernandez - Worst Rails Code

By “worst” I don’t mean stupid

3

Page 4: Obie Fernandez - Worst Rails Code

FAIL

Page 5: Obie Fernandez - Worst Rails Code

“stupid”is a really subjective term

Page 6: Obie Fernandez - Worst Rails Code

FAIL?

Page 7: Obie Fernandez - Worst Rails Code

I do mean not following

the Ruby or Rails Way

of doing things

Page 8: Obie Fernandez - Worst Rails Code

Ruby BasicsLearn them before calling yourself a Rails developer

Page 9: Obie Fernandez - Worst Rails Code
Page 10: Obie Fernandez - Worst Rails Code
Page 11: Obie Fernandez - Worst Rails Code
Page 12: Obie Fernandez - Worst Rails Code

hash.values

Page 13: Obie Fernandez - Worst Rails Code

pastie-grab

Page 14: Obie Fernandez - Worst Rails Code
Page 15: Obie Fernandez - Worst Rails Code

Wheel Mark IIDon’t reinvent stuff that Ruby or Rails already gives you

Page 16: Obie Fernandez - Worst Rails Code
Page 17: Obie Fernandez - Worst Rails Code

return if self.include? keyword

Page 18: Obie Fernandez - Worst Rails Code

The Problem with Reinvention

Your version is probably worse

Page 19: Obie Fernandez - Worst Rails Code
Page 20: Obie Fernandez - Worst Rails Code

javascript_include_tag :all

Page 21: Obie Fernandez - Worst Rails Code
Page 22: Obie Fernandez - Worst Rails Code

RoutesHeard of them?

Page 23: Obie Fernandez - Worst Rails Code
Page 24: Obie Fernandez - Worst Rails Code

AssociationsHeard of them?

Page 25: Obie Fernandez - Worst Rails Code
Page 26: Obie Fernandez - Worst Rails Code
Page 27: Obie Fernandez - Worst Rails Code

VerbosityWhy do in one line what can be done in five?

Page 28: Obie Fernandez - Worst Rails Code
Page 29: Obie Fernandez - Worst Rails Code
Page 30: Obie Fernandez - Worst Rails Code
Page 31: Obie Fernandez - Worst Rails Code
Page 32: Obie Fernandez - Worst Rails Code

Lazinessleads to sloppiness

Page 33: Obie Fernandez - Worst Rails Code

<%= "Count #{users.count + "!#{"!!" if users.count > 10}" unless users.count == 0}" %>

Page 34: Obie Fernandez - Worst Rails Code

Integration of Concerns

Multi-purpose methods are best?!

Page 35: Obie Fernandez - Worst Rails Code
Page 36: Obie Fernandez - Worst Rails Code

Premature Deoptimization

Why make things slower later when you can make them slower now?

Page 37: Obie Fernandez - Worst Rails Code

SRSLY?

Page 38: Obie Fernandez - Worst Rails Code
Page 39: Obie Fernandez - Worst Rails Code

Application-wide Actions

Abusing application.rb for fail and losses

Page 40: Obie Fernandez - Worst Rails Code
Page 41: Obie Fernandez - Worst Rails Code
Page 42: Obie Fernandez - Worst Rails Code

Database AbuseHow to create thousands of queries in a just a few lines

of code...

Page 43: Obie Fernandez - Worst Rails Code

coordinate_turns.sort! do |x,y| #orders coordinates for this turn from the one with the most inscriptions to the one with the least. Assignment.find_all_by_start_and_coordinate_id(turn,x).inject(0){|a,s| a += s.inscriptions.size } <=> Assignment. find_all_by_start_and_coordinate_id(turn,y).inject(0){|a,s| a += s.inscriptions.size }end

Page 44: Obie Fernandez - Worst Rails Code

cache_snafuHow not to cache...

Page 45: Obie Fernandez - Worst Rails Code
Page 46: Obie Fernandez - Worst Rails Code

Grotesquely Obese Controller Methods

Fat? Yeah, right...

Page 47: Obie Fernandez - Worst Rails Code

Deliberate ObfuscationFor no good reason...

Page 48: Obie Fernandez - Worst Rails Code

Why?

Page 49: Obie Fernandez - Worst Rails Code

Additional Examples(time permitting)

Page 50: Obie Fernandez - Worst Rails Code

The Shopping Cart Controller

When non-restful controllers go bad...

Page 51: Obie Fernandez - Worst Rails Code

aav_codePlugins...

Page 52: Obie Fernandez - Worst Rails Code

photos_helperWhen HTML generation goes way too far

Page 53: Obie Fernandez - Worst Rails Code

listing.rbA method named finderer O RLY?

Page 54: Obie Fernandez - Worst Rails Code

ui_user_controller.rbHow not to use the flash hash

Page 55: Obie Fernandez - Worst Rails Code

users_controller.rb1,131 lines of pure FAIL

Page 56: Obie Fernandez - Worst Rails Code

Conclusion

Page 57: Obie Fernandez - Worst Rails Code

FundamentalsLearn them

Page 58: Obie Fernandez - Worst Rails Code

Senior PeopleSeek them out and pair with them

Page 59: Obie Fernandez - Worst Rails Code

Read Some BooksBesides mine, there are some essentials