Model.find(id) is equivalent to Model.unscoped.where(:id => id).first!.
Model.find?(id) is equivalent to Model.unscoped.where(:id => id).first.
Note that find() is only defined on the Model class, and not on criteria.
I'd like to have find and find_by semantics to be similar. So I might have to remove the unscoped semantic. I'll sleep on it. If you have any opinion on what should be done, and why, I'd be happy to hear it.
Currenty, find is implemented with RQL get(). To do this, we can't use the default_scope or apply find on a criteria.
To use find on a criteria, it means that we need to use get_all(). However, from my benchmark, it appears that it's 50% slower.
So that mean that to have find to match the semantics of find_by, we'll have to give up 50% of the speed of the fast path Model.find(id). I'm not so thrilled about it :/