Repository URL to install this package:
|
Version:
4.0.0.pre.3 ▾
|
module Core
class Venue < ActiveRecord::Base
include PgSearch
has_many :organisation_venues, dependent: :destroy
has_many :organisations, through: :organisation_venues
has_many :events, through: :organisation_venues
has_many :instructors, through: :events # for :deep_search
validates :name, presence: true
validates :address, presence: true
validates :phone, presence: true
before_destroy :check_for_events
default_scope { order('created_at') }
scope :close_to, -> (latitude, longitude, distance_in_meters = 2000) {
where(%{
ST_DWithin(
ST_GeographyFromText(
'SRID=4326;POINT(' || core_venues.longitude
|| ' ' || core_venues.latitude || ')'
),
ST_GeographyFromText('SRID=4326;POINT(%f %f)'),
%d
)
} % [longitude, latitude, distance_in_meters])
}
pg_search_scope :search, against: [:name, :address],
using: { tsearch: { prefix: true } }
pg_search_scope :deep_search, against: [:name, :address],
associated_against: { events: :name,
instructors: :name },
using: { tsearch: { prefix: true } }
private
def check_for_events
unless events.empty?
self.errors[:base] << 'Cannot delete Venues with Events'
return false
end
end
end
end