Created
March 6, 2014 23:20
-
-
Save benshimmin/9401836 to your computer and use it in GitHub Desktop.
How to raise a validation error in Rails after save
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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.") | |
raise ActiveRecord::RecordInvalid.new(self) | |
end | |
end |
Yep, still helpful in 2019 :) Thanks!
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
user.assign_attributes(user_params)
raise ActiveRecord::RecordInvalid.new(user) if user.invalid?
if user.email_changed?
# Do something
end
end
raises Class: RuboCop::Cop::Style::RaiseArgs
cop with rubocop
. Any hints?
Hi!, this is helpfull, but I was wondering how would you rollback the saved record, after that?
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!
raises
Class: RuboCop::Cop::Style::RaiseArgs
cop withrubocop
. Any hints?
raise ActiveRecord::RecordInvalid, user if user.invalid?
and no rubocop error
Thanks!!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
THANKS!