class Organization < ActiveRecord::Base mount_uploader :logo, LogoUploader mount_uploader :avatar, AvatarUploader mount_uploader :cover, CoverUploader has_many :locations_organization has_many :locations, through: :locations_organization has_many :user_organization_relationships, dependent: :destroy has_many :users, through: :user_organization_relationships accepts_nested_attributes_for :locations, :reject_if => proc {|l| l[id].blank?} accepts_nested_attributes_for :user_organization_relationships, :reject_if => proc {|u| u[:user_id].blank?}, :allow_destroy => true before_create :make_slug def location locations.first end def longitude location.longitude end def latitude location.latitude end def to_param slug end def host?(user) return false unless user.present? return true if user.administrator? users.each do |u| return true if u.id == user.id end return false end def generate_slug(name, location = nil) s = name.gsub(/[^a-z1-9]+/i, '-').chomp('-').gsub(/\-([A-Z])/, '\1') if Organization.find_by(:slug => s).present? && !location.nil? if location.city.present? s += '-' + location.city end if Organization.find_by(:slug => s).present? && location.territory.present? s += '-' + location.territory end if Organization.find_by(:slug => s).present? s += '-' + location.country end end attempt = 1 ss = s while Organization.find_by(:slug => s) attempt += 1 s = ss + '-' + attempt.to_s end s end def self.find_by_city(city) Organization.joins(:locations).where(locations: { city_id: city.is_a?(City) ? city.id : city }) end private def make_slug if !self.slug self.slug = generate_slug(self.name, self.locations && self.locations[0]) end end end