Specifies a one-to-one relationship to another model. The target model must include a "Belongs To" reference to the current model to allow the inverse relationship.
In short: belongs_to is the child/dependent resource while has_one is the parent/depending resource
technically there is no difference, but the ORM uses the difference to determine where the foreign key is.
If you have a one-to-one relation, one side is a has_one, the other side is the belongs_to, and the belongs_to side always has the foreign key (this is the easiest to remember).
In this respect, you define a has_one and a has_many the same way, both have a belongs_to and the child side of the relation.