- Splitting out logical pieces of behaviour into separate modules, especially the ones less central to the core responsibilities of the class. If you look at Rails itself (it's great Ruby code, I highly recommend really reading it), this is the way it is structured, ActiveRecord::Base provides tons of functionality as a single class, yet it still is very neatly laid out into many well-separated modules. See e. g.:
https://gist.github.com/1014971
http://api.rubyonrails.org/classes/ActiveSupport/Concern.htm...
https://github.com/jakehow/concerned_with
http://blog.waxman.me/extending-your-models-in-rails-3
Deciding what things would fit well into external modules and what modules to create is a new skill to be learned, but I think it can work well once you do learn it.
- Things that aren't part of business logic but just handle some more technical matters should be extracted into plugins and not be directly part of the models (for example: special kinds of validations).
- There is the whole world of OO techniques and patterns that can be applied here just like anywhere else. For example you can extract complicated algorithms into separate classes or use value objects:
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations...