module Sequel::Plugins::ValidateAssociated::InstanceMethods
Private Instance Methods
delay_validate_associated_object(reflection, obj)
click to toggle source
Delay validating the associated object until validating the current object.
# File lib/sequel/plugins/validate_associated.rb, line 29 def delay_validate_associated_object(reflection, obj) after_validation_hook{validate_associated_object(reflection, obj)} end
validate_associated_object(reflection, obj)
click to toggle source
Validate the given associated object, adding any validation error messages from the given object to the parent object.
# File lib/sequel/plugins/validate_associated.rb, line 35 def validate_associated_object(reflection, obj) return if reflection[:validate] == false association = reflection[:name] if (reflection[:type] == :one_to_many || reflection[:type] == :one_to_one) && (key = reflection[:key]).is_a?(Symbol) && !(pk_val = obj.values[key]) # There could be a presence validation on the foreign key in the associated model, # which will fail if we validate before saving the current object. If there is # no value for the foreign key, set it to the current primary key value, or a dummy # value of 0 if we haven't saved the current object. p_key = pk unless pk.is_a?(Array) obj.values[key] = p_key || 0 key = nil if p_key end obj.errors.full_messages.each{|m| errors.add(association, m)} unless obj.valid? if key && !pk_val # If we used a dummy value of 0, remove it so it doesn't accidently remain. obj.values.delete(key) end end