module NxtSupport::SafelyFindOrCreateable::ClassMethods
Public Instance Methods
safely_find_or_create_by(attributes, &block)
click to toggle source
# File lib/nxt_support/models/safely_find_or_createable.rb, line 6 def safely_find_or_create_by(attributes, &block) transaction(requires_new: true) { create(attributes, &block) } rescue ActiveRecord::RecordNotUnique find_by(attributes) end
safely_find_or_create_by!(attributes, &block)
click to toggle source
# File lib/nxt_support/models/safely_find_or_createable.rb, line 12 def safely_find_or_create_by!(attributes, &block) transaction(requires_new: true) { create!(attributes, &block) } rescue ActiveRecord::RecordNotUnique find_by!(attributes) rescue ActiveRecord::RecordInvalid => e all_errors_are_uniqueness_failures = e.record.errors.details.all? { |_key, errs| errs.all? { |err| err[:error] == :taken } } raise unless all_errors_are_uniqueness_failures find_by!(attributes) end