Made with Slides
Pricing
Features
Teams
Log in
Sign up
Coding session
Good Things
Controller logic to Models
Models logic to Modules
-
View logic to Decorators
View logic to Helpers
Why Good ?
Skinny Controllers -> Readable
Models -> Reusable
Modules -> Single Responsability
Decorators -> Readable
Bad Things
Naming
Namespacing
Big Methods
Naming
What '
Paginate' should do ?
Actually, '
Paginate
' is a module that define behavior for pagination
Possible good naming could be 'Paginable'
Naming
What 'pool_url' should do ?
Actually, its display not only the url, but the full link tag
Possible good naming could be just 'pool', as its belongs in a decorator
Facing Problems
What to refactor
What priority
Make a "junk" module OR severals skinny modules
Refactoring too fast
What to refactor and priority
Controller logic into Models
View logic into Decorators
Models logic into Modules
View logic into Helpers
Helpers & Modules into namespaced Class
The END ?
AREL + Active Record
AREL = Relational Algebra
Active Record = ORM
-
AREL means Active Relation
ORM means Object-Relational Mapping
How the logic works
AREL construct the query
users = User.where(admin: true)
This is not a collection, it's an ActiveRelation object
ordered_users = user.order("name ASC")
-
ActiveRecord perform the query an translate it into ruby
users = users.all.to_a
This is a collection of User
Method 'to_a' force the query to be executed and wrapped in a collection
Coding !
Make an simple AREL/ActiveRecord yourself !
Complete the ArticlesController#coding_arel method
http://192.168.10.10:3000/articles/coding_arel
-
Hint : Keep it simple (to code, and to use)
Hint : Use Model.find_by_sql("query") to perform SQL
Hint : Use ActiveSupport::Inflector#tableize
Hint : Use ActiveRelation#to_sql to see SQL syntax
-
When you'r done, refactor (step by step)
Coding session - review
By Thomas Petrachi
Coding session - review
630
Thomas Petrachi
Loading comments...
More from
Thomas Petrachi