today_ai_weather/app/models/country.rb
songtianlun bd42833953 feat: add translatable name module for countries and regions
- Introduced `TranslatableName` module to allow for
  localized names for `Country` and `Region` models.
- Updated views to display `localized_name` instead of
  `name` for improved internationalization.
- Refactored JSON serialization for `translations` attribute.
- Enhanced localization support by adding new languages:
  Japanese and Korean, with updated locale files.
- Removed outdated English and Chinese locales for countries
  and regions to clean up the codebase.
2025-02-21 23:46:25 +08:00

60 lines
1.5 KiB
Ruby

class Country < ApplicationRecord
include TranslatableName
extend FriendlyId
friendly_id :name, use: :slugged
# before_save :format_json_attributes, :timezones, :translations
belongs_to :region, optional: true
belongs_to :subregion, optional: true
has_many :cities, dependent: :restrict_with_error
has_many :states
validates :name, presence: true
validates :code, presence: true, uniqueness: true
validates :iso2, uniqueness: true, allow_blank: true
serialize :translations, coder: JSON
def to_s
name
end
# def localized_name
# I18n.t("countries.#{code}")
# end
def self.ransackable_attributes(auth_object = nil)
[ "code", "created_at", "id", "id_value", "name", "region_id", "slug", "updated_at" ]
end
def self.ransackable_associations(auth_object = nil)
[ "cities", "region" ]
end
private
# def format_timezones
# return unless timezones.is_a?(String)
#
# # 使用正则替换 => 为 :
# json_string = timezones.gsub(/=>/, ":")
#
# # 清理多余的空格
# json_string = json_string.gsub(/\s+/, " ").strip
#
# begin
# # 验证是否为有效的 JSON
# parsed_json = JSON.parse(json_string)
# self.timezones = parsed_json.to_json
# rescue JSON::ParserError
# # 如果转换失败,可以选择:
# # 1. 保持原值
# # 2. 设置为空数组
# # 3. 记录错误日志
# Rails.logger.error("Invalid JSON format for country #{id}: #{timezones}")
# self.timezones = "[]"
# end
# end
end