DRY up the save methods with metaprogramming