- belongs_to :user
- 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
+ scope :visible, -> { where(:visible => true) }
+ scope :visible_to, ->(u) { visible.where("visibility IN ('public', 'identifiable') OR user_id = ?", u) }
+ scope :visible_to_all, -> { where(:visibility => %w(public identifiable)) }
+ scope :tagged, ->(t) { joins(:tags).where(:gpx_file_tags => { :tag => t }) }
+
+ validates :user, :presence => true, :associated => true
+ validates :name, :presence => true, :length => 1..255
+ validates :description, :presence => { :on => :create }, :length => 1..255
+ validates :timestamp, :presence => true
+ validates :visibility, :inclusion => %w(private public trackable identifiable)