- Implement meta tags in ArtsController, CitiesController, HomeController, and WeatherArtsController for better SEO. - Use translation helpers for titles, descriptions, and keywords to improve internationalization support. - Update default meta tags in ApplicationHelper for consistent site-wide SEO. These changes enhance the search engine visibility of the application by providing relevant meta information across various pages. Utilizing translation for these fields promotes better support for multiple languages, aligning with localization efforts.
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.name),
|
|
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
|