Rails Best Practices

10 votes

5 comments

2068 views

use after_commit

Most developers use AR callbacks after_create/after_update/after_destroy to generate background job, expire cache, etc., but they don't realize these callbacks are still wrapped in database transaction, they probably got unexpected errors on production servers.

flyerhzm

5 votes

3 comments

4309 views

Protect mass assignment

Rails mass assignment feature is really useful, but it may be a security issue, it allows an attacker to set any models' attributes you may not expect. To avoid this, we should add attr_accessbile or attr_protected to all models.

implemented
flyerhzm

11 votes

8 comments

6261 views

Not use time_ago_in_words

It's very common for a rails developer to use time_ago_in_words to display time like "5 minutes ago", but it's too expensive to calculate the time in server side, you should utilize client cpu to calculate the time ago.

implemented
flyerhzm

1 votes

2 comments

5400 views

Name your model methods after their behavior, not implementation.

Business model methods should be named after the logic / business value they provide, not the implementation details. Violations to this practice tend to show up on ActiveRecord models.

by brasten
brasten

6 votes

7 comments

10053 views

Use cells to abstract view widgets

Rails developers always pay more attentions on models and controllers refactoring, they don't take care about views modularization, that makes view codes most difficult to maintain. Here I recommend you to use cells gem to write more reuseable, testable and cacheable view codes.

flyerhzm

3 votes

4 comments

7566 views

Optimize db migration

rails migration provides a convenient way to alter database structure, you can easily add, change and drop column to a existing table, but when the data in existing table are huge, it will take a long time to alter existing table, you should try to merge/optimize the db alter sql statements.

flyerhzm

11 votes

5 comments

7253 views

Restrict auto-generated routes.

By default, Rails generates seven RESTful routes(new,edit,create,destroy,index,show, update) for a resource, sometime the resource only needs one or two routes, so just user :only or :except while defining routes to speedup the routing.

implemented
by yorzi
yorzi

0 votes

7 comments

5868 views

Remove tab

Using tabs can mess up the spacing since some IDE's use 4 spaces for a tab, while others use 2, and some people don't use tabs at all, a mix of tabs and spaces causes things to not line up in most cases.

implemented
flyerhzm

5 votes

2 comments

8280 views

Active Record Query Interface Optimization

Use select with has_many and belongs_to on Active Record Associations

angelo capilleri

-4 votes

5 comments

6836 views

Create base conroller

Have base controllers for DRY

by guolei
guolei
Fork me on GitHub