X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/e3ed9988ce5f57ed303326072f7f583b641e8774..07fdcf638ea8f7200b561f4cc190f231929cda0b:/app/models/trace.rb?ds=sidebyside diff --git a/app/models/trace.rb b/app/models/trace.rb index 892d41a2a..3d23d02c8 100644 --- a/app/models/trace.rb +++ b/app/models/trace.rb @@ -289,6 +289,8 @@ class Trace < ActiveRecord::Base # If there are any existing points for this trace then delete them Tracepoint.where(:gpx_id => id).delete_all + # Gather the trace points together for a bulk import + tracepoints = [] gpx.points do |point| if first f_lat = point.latitude @@ -303,9 +305,16 @@ class Trace < ActiveRecord::Base tp.timestamp = point.timestamp tp.gpx_id = id tp.trackid = point.segment - tp.save! + tracepoints << tp end + # Run the before_save and before_create callbacks, and then import them in bulk with activerecord-import + tracepoints.each do |tp| + tp.run_callbacks(:save) { false } + tp.run_callbacks(:create) { false } + end + Tracepoint.import!(tracepoints, :batch_size => 1_000) + if gpx.actual_points.positive? max_lat = Tracepoint.where(:gpx_id => id).maximum(:latitude) min_lat = Tracepoint.where(:gpx_id => id).minimum(:latitude)