Yep, when validations don’t pass, record.save will return false. (So will record.valid?) One can then inspect the errors using record.errors.
One small piece of advice, I wouldn’t name a model Transaction for the risk of confusion with an Activerecord Transaction. The alternative would be to qualify your business-land Transaction using some kind of prefix or module. (eg. BusinessTransaction, OurCompany::Transaction, or some similar workaround).