]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/trace.rb
Remove redundant presence validation on belongs_to
[rails.git] / app / models / trace.rb
index 17f8ebc1e12d70779f58bf66d5df7ff9e1cd0690..f2d81e31aa861f7d700cb546f680af906e1d4a5f 100644 (file)
@@ -31,8 +31,8 @@ class Trace < ApplicationRecord
   self.table_name = "gpx_files"
 
   belongs_to :user, :counter_cache => true
-  has_many :tags, :class_name => "Tracetag", :foreign_key => "gpx_id", :dependent => :delete_all
-  has_many :points, :class_name => "Tracepoint", :foreign_key => "gpx_id", :dependent => :delete_all
+  has_many :tags, :class_name => "Tracetag", :foreign_key => "gpx_id", :dependent => :delete_all, :inverse_of => :trace
+  has_many :points, :class_name => "Tracepoint", :foreign_key => "gpx_id", :dependent => :delete_all, :inverse_of => :trace
 
   scope :visible, -> { where(:visible => true) }
   scope :visible_to, ->(u) { visible.where("visibility IN ('public', 'identifiable') OR user_id = ?", u) }
@@ -43,7 +43,7 @@ class Trace < ApplicationRecord
   has_one_attached :image, :service => Settings.trace_image_storage
   has_one_attached :icon, :service => Settings.trace_icon_storage
 
-  validates :user, :presence => true, :associated => true
+  validates :user, :associated => true
   validates :name, :presence => true, :length => 1..255, :characters => true
   validates :description, :presence => { :on => :create }, :length => 1..255, :characters => true
   validates :timestamp, :presence => true
@@ -300,6 +300,26 @@ class Trace < ApplicationRecord
     end
   end
 
+  def migrate_to_storage!
+    file.attach(:io => File.open(trace_name),
+                :filename => name,
+                :content_type => content_type(trace_name),
+                :identify => false)
+
+    if inserted
+      image.attach(:io => File.open(large_picture_name),
+                   :filename => "#{id}.gif",
+                   :content_type => "image/gif")
+      icon.attach(:io => File.open(icon_picture_name),
+                  :filename => "#{id}_icon.gif",
+                  :content_type => "image/gif")
+    end
+
+    save!
+
+    remove_files
+  end
+
   private
 
   def content_type(file)