35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/activerecord-import/import.rb', line 35
def import(*args, &block)
unless owner.persisted?
raise ActiveRecord::RecordNotSaved, "You cannot call import unless the parent is saved"
end
options = args.last.is_a?(Hash) ? args.pop : {}
model_klass = self.reflection.klass
symbolized_foreign_key = self.reflection.foreign_key.to_sym
symbolized_column_names = model_klass.column_names.map(&:to_sym)
owner_primary_key = self.owner.class.primary_key
owner_primary_key_value = self.owner.send(owner_primary_key)
if args.last.is_a?( Array ) and args.last.first.is_a? ActiveRecord::Base
if args.length == 2
models = args.last
column_names = args.first
else
models = args.first
column_names = symbolized_column_names
end
if !symbolized_column_names.include?(symbolized_foreign_key)
column_names << symbolized_foreign_key
end
models.each do |m|
m.send "#{symbolized_foreign_key}=", owner_primary_key_value
end
return model_klass.import column_names, models, options
elsif args.last.is_a?( Array ) and args.last.empty?
return ActiveRecord::Import::Result.new([], 0, []) if args.last.empty?
elsif args.size == 2 and args.first.is_a?( Array ) and args.last.is_a?( Array )
column_names, array_of_attributes = args
symbolized_column_names = column_names.map(&:to_s)
if !symbolized_column_names.include?(symbolized_foreign_key)
column_names << symbolized_foreign_key
array_of_attributes.each { |attrs| attrs << owner_primary_key_value }
else
index = symbolized_column_names.index(symbolized_foreign_key)
array_of_attributes.each { |attrs| attrs[index] = owner_primary_key_value }
end
return model_klass.import column_names, array_of_attributes, options
else
raise ArgumentError.new( "Invalid arguments!" )
end
end
|