- Modify weather description format in multiple language locale files - Use full city name in place of just city name in descriptions - Ensure consistency across all language files for better user experience These changes standardize the way city weather is presented across various languages by including more detailed descriptions, thus enhancing clarity and providing additional context for users.
97 lines
3.2 KiB
Ruby
97 lines
3.2 KiB
Ruby
class CitiesController < ApplicationController
|
|
include TagHelper
|
|
before_action :authenticate_user!, only: [ :generate_weather_art ]
|
|
before_action :require_admin, only: [ :generate_weather_art ]
|
|
|
|
def index
|
|
@regions = Region.order(:name)
|
|
@cities = City.includes(:country, :state).order(:name)
|
|
@latest_arts = WeatherArt.includes(:city, :image_attachment).latest(1)
|
|
|
|
if params[:query].present?
|
|
@cities = @cities.search_by_name(params[:query])
|
|
end
|
|
|
|
if params[:region]
|
|
@current_region = Region.friendly.find(params[:region])
|
|
@cities = @cities.by_region(@current_region.id) if @current_region
|
|
end
|
|
|
|
if params[:country]
|
|
@current_country = Country.friendly.find(params[:country])
|
|
@cities = @cities.by_country(@current_country.id) if @current_country
|
|
end
|
|
|
|
if params[:state]
|
|
@current_state = State.friendly.find(params[:state])
|
|
@cities = @cities.by_state(@current_state.id) if @current_state
|
|
end
|
|
|
|
@cities = @cities.page(params[:page]).per(12)
|
|
|
|
respond_to do |format|
|
|
format.html
|
|
format.turbo_stream {
|
|
render turbo_stream: turbo_stream.update("cities_results",
|
|
partial: "cities/results",
|
|
locals: {
|
|
cities: @cities,
|
|
pagination_params: {
|
|
region: params[:region],
|
|
country: params[:country],
|
|
state: params[:state],
|
|
query: params[:query]
|
|
}
|
|
}
|
|
)
|
|
}
|
|
end
|
|
|
|
set_meta_tags(
|
|
title: t("meta.cities.index.title"),
|
|
description: t("meta.cities.index.description"),
|
|
keywords: t("meta.cities.index.keywords")
|
|
)
|
|
end
|
|
|
|
def show
|
|
@city = City.friendly.find(params[:id])
|
|
@arts = @city.weather_arts.order(weather_date: :desc).includes([ :image_attachment ])
|
|
ahoy.track "View City", {
|
|
city_id: @city.id,
|
|
name: @city.name,
|
|
event_type: "city_view"
|
|
}
|
|
|
|
set_meta_tags(
|
|
title: t("meta.cities.show.title", city_name: @city.name, country_name: @city&.country&.name.to_s),
|
|
description: t("meta.cities.show.description", city_name: @city.full_name, city_desc: @city.get_description("en", false, true, false)),
|
|
keywords: t("meta.cities.show.keywords", city_name: @city.name, country_name: @city.country&.name.to_s),
|
|
og: {
|
|
image: @city.latest_weather_art&.image&.attached? ? url_for(@city.latest_weather_art.image) : nil
|
|
}
|
|
)
|
|
end
|
|
|
|
def generate_weather_art
|
|
@city = City.friendly.find(params[:id])
|
|
GenerateWeatherArtWorker.perform_async(@city.id)
|
|
|
|
respond_to do |format|
|
|
format.html do
|
|
flash[:notice] = "Weather art generation has been queued"
|
|
redirect_to @city
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def require_admin
|
|
unless current_user&.admin?
|
|
flash[:error] = "You are not authorized to perform this action"
|
|
redirect_to root_path
|
|
end
|
|
end
|
|
end
|