These could be better using group by also.  Right now you're doing:

```
SELECT COUNT(*) FROM likes WHERE likeable_type = 'Post';
SELECT COUNT(*) FROM likes WHERE likeable_type = 'Post' AND good = true;
SELECT COUNT(*) FROM likes WHERE likeable_type = 'Post' AND good = false;
```

You can do  `@user.likes.where(likeable_type: Post).group(:name).count`, and that will give you back:
```
{true => 3,
 false => 5
}
```
by doing a group by query:
```
SELECT count(good) FROM likes WHERE likes.likeable_type = 'Post' AND likes.user_id = 4 GROUP BY good
```