15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/foreign_key_validation/model_extension.rb', line 15
def validate_foreign_keys(opt={})
validate_against = (opt[:on] || :user).to_s
reflections = self.reflect_on_all_associations(:belongs_to).map(&:name).map(&:to_s)
validate_with = ((Array(opt[:with]).map(&:to_s) if opt[:with]) || reflections).reject {|n| n == validate_against}
raise ArgumentError, "No foreign key #{validate_against} on #{self.table_name} table!" unless reflections.include?(validate_against)
raise ArgumentError, "Unknown relation in #{validate_with}!" unless validate_with.all? {|k| reflections.include?(k) }
define_method "validate_foreign_keys_on_#{validate_against}" do
validate_with.each do |relation|
validate_foreign_key(validate_against, relation)
end
end
private "validate_foreign_keys_on_#{validate_against}".to_sym
before_validation "validate_foreign_keys_on_#{validate_against}"
end
|