Question: What is the difference between the  

`has_and_belongs_to_many` and  

`has_many through` relationships? When and where to use which one?

Answer: 
As far as I can remember, `has_and_belongs_to_many` gives you a simple lookup table which references your two models.

For example, 

Stories can belong to many categories.
Categories can have many stories.

```
Categories_Stories Table
story_id | category_id

```

`has_many :through` gives you a third model which can be used to store various other pieces of information which don't belong to either of the original models.

For example

Person can subscribe to many magazines.
Magazines can have many subscribers.

Thus, we can have a subscription model in the middle, which gives us a similar table to the earlier example, but with additional properties.

```
Subscriptions Table
person_id | magazine_id | subscription_type | subscription_length | subscription_date 

```

And so on.
You should use has\_many :through if you need validations, callbacks, or extra attributes on the join model.