class City < ApplicationRecord extend FriendlyId friendly_id :slug_candidates, use: :slugged belongs_to :country has_many :weather_arts, dependent: :destroy validates :name, presence: true validates :latitude, presence: true validates :longitude, presence: true delegate :region, to: :country scope :by_region, ->(region_id) { joins(:country).where(countries: { region_id: region_id }) } scope :by_country, ->(country_id) { where(country_id: country_id) } scope :active, -> { where(active: true) } def to_s name end def slug_candidates [ :name, [ :country, :name ] ] end def localized_name I18n.t("cities.#{name.parameterize.underscore}") end def full_name "#{name}, #{country}" end def should_generate_new_friendly_id? name_changed? || super end def self.ransackable_associations(auth_object = nil) [ "weather_arts" ] end def self.ransackable_attributes(auth_object = nil) [ "active", "country", "created_at", "id", "id_value", "last_image_generation", "last_weather_fetch", "latitude", "longitude", "name", "priority", "region", "slug", "timezone", "updated_at" ] end def latest_weather_art weather_arts.order(weather_date: :desc).first end end