Don't store reset tokens in database, PITA and not scalable. Instead HMAC sign reset URL, using Rails' MessageVerifier class for example.
The reset URL should also expire in about a day, so include and sign timestamp as well.
And the way we know this is good advice is that most large sites do it this way already.