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

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

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

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

Copy link


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