I think this is because rails will treat "id" as an alias for primary key. From `read_attribute` definition:

```
            if name == 'id' && self.class.primary_key != name
              read_attribute(self.class.primary_key)
            end
```

I believe others will have the same question though. So maybe instead we could write:

```
# <tt>ActiveModel::MissingAttributeError</tt> if the identified attribute is missing.
# Note: +:id+ will default to the record's primary key if not present
```

Or something similar. It isn't that :id is special cased (and will always be present) but that if not present it will look for primary_key, which could still possibly not exist if there is a problem with migrations or the database.