As we build software, a lot of us get caught up in Rails. You build your application around Rails' suggestions and before you know it, you're really stuck. Just because Rails gives you controllers, models, and helpers doesn't mean your code needs to be bent to fit inside of them. In fact, in order to build well testable code, you should deviate from this.
Rails developers are often afraid of stepping outside Rail's default boundaries and creating their own plain classes to handle your business logic. Gary Bernhardt's talk has a bunch of good examples and advice for building applications that use Rails as an interface to HTTP and not your entire application.