I think the reason rails has stuck around is because of it being a very opinionated framework and it dictates a method to do almost anything. This allows the docs to be very straightforward, almost as if they were written for the Rails application itself.
I also think the language itself is a big plus. I don't like the reflection system or hot patching being a feature in a language, but rails makes extensive use of it to create it's own domain specific language.
The reflection and hot patching features are often called out as negatives, and in general I agree, but for the most part, they're non-factors. All of the "find_x_by_id_and_status()" methods that rely heavily on reflection are all available with a more general, maintainable "find_by()" method which just takes a hash of parameters. And in practice, I'm not sure how much custom hot patching is actually used in production codebases. Overall it's mostly a red herring which detractors have vastly overstated.
I also think the language itself is a big plus. I don't like the reflection system or hot patching being a feature in a language, but rails makes extensive use of it to create it's own domain specific language.