mirror of
https://github.com/discourse/discourse.git
synced 2024-12-16 10:43:45 +08:00
32 lines
630 B
Ruby
32 lines
630 B
Ruby
|
# Helper functions for dealing with errors and objects that have
|
||
|
# child objects with errors
|
||
|
module HasErrors
|
||
|
|
||
|
def errors
|
||
|
@errors ||= ActiveModel::Errors.new(self)
|
||
|
end
|
||
|
|
||
|
def validate_child(obj)
|
||
|
return true if obj.valid?
|
||
|
add_errors_from(obj)
|
||
|
false
|
||
|
end
|
||
|
|
||
|
def rollback_with!(obj, error)
|
||
|
obj.errors[:base] << error
|
||
|
rollback_from_errors!(obj)
|
||
|
end
|
||
|
|
||
|
def rollback_from_errors!(obj)
|
||
|
add_errors_from(obj)
|
||
|
raise ActiveRecord::Rollback.new
|
||
|
end
|
||
|
|
||
|
def add_errors_from(obj)
|
||
|
obj.errors.full_messages.each do |msg|
|
||
|
errors[:base] << msg unless errors[:base].include?(msg)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|