Just thinking out loud here…
What about if you changed the parameter to nationality_id instead of nationality. That way, when the constructor is creating the object calls the method nationality_id= which is expecting a integer instead of the the method its currently calling nationality= which is created from the belongs_to declaration.
In either case, your workaround does the trick but this might be a little more efficient.
Adam