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) }
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
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)