adopt-a-hydrant/app/models/thing.rb

62 lines
1.1 KiB
Ruby
Raw Normal View History

class Thing < ActiveRecord::Base
include Geokit::Geocoders
2012-01-27 21:11:44 +00:00
validates_uniqueness_of :city_id, :allow_nil => true
2011-05-22 14:27:36 +00:00
validates_presence_of :lat, :lng
2011-02-23 20:50:59 +00:00
belongs_to :user
2011-05-22 14:35:46 +00:00
has_many :reminders
2011-02-23 20:50:59 +00:00
def self.find_closest(lat, lng, limit=10)
query = <<-SQL
SELECT *, (3959 * ACOS(COS(RADIANS(?)) * COS(RADIANS(lat)) * COS(radians(lng) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(lat)))) AS distance
FROM things
ORDER BY distance
LIMIT ?
SQL
find_by_sql([query, lat.to_f, lng.to_f, lat.to_f, limit.to_i])
2011-02-23 20:50:59 +00:00
end
def reverse_geocode
@reverse_geocode ||= MultiGeocoder.reverse_geocode([lat, lng])
end
def street_number
reverse_geocode.street_number
end
def street_name
reverse_geocode.street_name
end
def street_address
reverse_geocode.street_address
end
def city
reverse_geocode.city
end
def state
reverse_geocode.state
end
def zip
reverse_geocode.zip
end
def country_code
reverse_geocode.country_code
end
def country
reverse_geocode.country
end
def full_address
reverse_geocode.full_address
end
def adopted?
!user_id.nil?
end
2011-02-23 20:50:59 +00:00
end