has_one target assignments enforce argument type