我正在尝试整理一些世界上最好的城市的目录。
我有:
ContinentsController < ApplicationController
def index
end
def show
end
end
CountriesController < ApplicationController
def index
end
def show
end
end
CitiesController < ApplicationController
def index
end
def show
end
end
以及:
class Continent < ApplicationRecord
has_many :countries
validates :continent_name, presence: true
end
class Country < ApplicationRecord
belongs_to :continent
has_many :cities
validates :country_name, presence: true
validates :continent_id, presence: true
end
class City < ApplicationRecord
belongs_to :continent
belongs_to :country
validates :city_name, presence: true
validates :country_id, presence: true
validates :continent_id, presence: true
end
我正在使用地理编码器gem。我将如何对此进行地理编码? country_name
和city_name
都需要对城市进行地理编码,因为世界不同地区的城市可以共享相同的名称。一个例子是位于俄罗斯和美国的圣彼得堡。
class City < ApplicationRecord
geocoded_by :city_name
after_validation :geocode, if: :city_name_changed?
end
这在圣彼得堡不起作用,因为它只是对city_name
而不是country_name
进行地理编码。
非常感谢!
答案 0 :(得分:2)
您可以执行以下操作:
class City < ApplicationRecord
geocoded_by :address
after_validation :geocode, if: :city_name_changed?
def address
"#{city_name}, #{country_name}"
end
end
文档显示以下内容:
def address
[street, city, state, country].compact.join(', ')
end
答案 1 :(得分:0)
地理编码不必是一列,它可以是一个实例方法
class City < ApplicationRecord
geocoded_by :address
def address
[city_name, country_name].compact.join(', ')
end
end