Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
How to raise a validation error in Rails after save
# This probably isn't a good thing to want to do, but it came up for me,
# so in the spirit of helping others with weird problems (and because this
# seems to be documented almost nowhere):
after_save do
if some_failing_condition
errors.add(:something, "some failure happened.")
Copy link

lesliev commented Jun 6, 2018


Copy link

jkeam commented Apr 15, 2019

Yep, still helpful in 2019 :) Thanks!

Copy link

daveharris commented Jun 13, 2019

This approach is also really useful in situations where you want to use ActiveModel::Dirty tracking, but also ensure that it's a valid update before progressing:

user.transaction do
  raise if user.invalid?

  if user.email_changed?
    # Do something

Copy link

dharshan commented Nov 12, 2019

raises Class: RuboCop::Cop::Style::RaiseArgs cop with rubocop. Any hints?

Copy link

blanks88 commented Aug 6, 2020

Hi!, this is helpfull, but I was wondering how would you rollback the saved record, after that?

Copy link

dbrady commented Oct 16, 2020

Still helpful in October 2020. We were on Rails 6 and we thought "oh, but it's all ActiveRelation now" but nope, ActiveRelation inherits from ActiveRecord::Base, and this is still the correct error class. Thank you!

Copy link

mateuszdw commented Jan 8, 2021

raises Class: RuboCop::Cop::Style::RaiseArgs cop with rubocop. Any hints?

raise ActiveRecord::RecordInvalid, user if user.invalid? and no rubocop error

Copy link

shimaamarzouk commented Nov 10, 2021


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment