Sha256: cd403604330c369b4fd1cb5c4e8e85c25b810dacfe8c5f0bd427abb06f292cc3

Contents?: true

Size: 1.68 KB

Versions: 3

Compression:

Stored size: 1.68 KB

Contents

# Location 是地理位置。具体对应到某一个街道地址。

class Unidom::Geo::Location < Unidom::Geo::ApplicationRecord

  self.table_name = 'unidom_locations'

  include Unidom::Common::Concerns::ModelExtension

  validates :latitude,  presence: true, numericality: { greater_than_or_equal_to: -90,  less_than_or_equal_to: 90  }
  validates :longitude, presence: true, numericality: { greater_than_or_equal_to: -180, less_than_or_equal_to: 180 }

  validates :postal_address, presence: true, length: { in: 2..self.columns_hash['postal_address'].limit }
  validates :postal_code,    presence: true, length: { in: 3..self.columns_hash['postal_code'].limit    }

  validates :minimum_latitude,  presence: true, numericality: { greater_than_or_equal_to: -90,  less_than_or_equal_to: 90  }
  validates :maximum_latitude,  presence: true, numericality: { greater_than_or_equal_to: -90,  less_than_or_equal_to: 90  }
  validates :minimum_longitude, presence: true, numericality: { greater_than_or_equal_to: -180, less_than_or_equal_to: 180 }
  validates :maximum_longitude, presence: true, numericality: { greater_than_or_equal_to: -180, less_than_or_equal_to: 180 }

  belongs_to :region, polymorphic: true

  has_many :locatings, class_name: 'Unidom::Geo::Locating'

  scope :region_is,         ->(region)         { where region:         region         }
  scope :postal_address_is, ->(postal_address) { where postal_address: postal_address }

  def locate!(located, by: nil, at: Time.now)
    locatings.located_is(located).valid_at(now: at).alive.first_or_create! locator: by, opened_at: at
  end

  def locate?(located, at: Time.now)
    locatings.located_is(located).valid_at(now: at).alive.exists?
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
unidom-geo-1.4.3 app/models/unidom/geo/location.rb
unidom-geo-1.4.2 app/models/unidom/geo/location.rb
unidom-geo-1.4.1 app/models/unidom/geo/location.rb