Prefer the use of public_send over eval

`eval` should be used really carefully.
I've got some concerns with this change, using a .new won't trigger the model validations, it's why the create is used here.