Вроде как ActiveRecord и реализует всё это: проверка поступающих значений, сценарии для контроля, когда какие атрибуты могут быть изменены.
save(), кажется, тоже сохраняет только изменившиеся значения (можете покопаться в исходниках или документации, так как я в этом месте глубоко не копал).
Как образец, можете посмотреть реализацию регистрации и логинов (несколько форм и контроллеров) в приложении advanced.