you can't stop me from errors = [ ("Name is required." unless name.present?), ("Badge text is required." unless badge_text.present?), ("Email is required." unless email.present?), ("Email and confirmation must match" unless email == email_confirmation), ].compact
In theory if you knew the whole block had no side effects until transaction commit, you could wrap in a serializable transaction and replay on commit failure.