對模型進行地理編碼
假設你的使用者和/或群組有個人資料,並且你希望在 Google 地圖上顯示地址個人資料欄位。
# app/models/profile_fields/address.rb
class ProfileFields::Address < ProfileFields::Base
# Attributes:
# label, e.g. "Work address"
# value, e.g. "Willy-Brandt-Straße 1\n10557 Berlin"
end
地理編碼地址的一種很好的方法,即提供 longitude
和 latitude
是地理編碼器的寶石 。
新增地理編碼器到 Gemfile
並執行 bundle
進行安裝。
# Gemfile
gem 'geocoder', '~> 1.3'
為 latitude
和 longitude
新增資料庫列,以便在資料庫中儲存位置。這比每次需要位置時查詢地理編碼服務更有效。它更快,你沒有那麼快達到查詢限制。
➜ bin/rails generate migration add_latitude_and_longitude_to_profile_fields \
latitude:float longitude:float
➜ bin/rails db:migrate # Rails 5, or:
➜ rake db:migrate # Rails 3, 4
將地理編碼機制新增到模型中。在此示例中,地址字串儲存在 value
屬性中。配置地理編碼以在記錄更改時執行,並且僅存在值:
# app/models/profile_fields/address.rb
class ProfileFields::Address < ProfileFields::Base
geocoded_by :value
after_validation :geocode, if: ->(address_field){
address_field.value.present? and address_field.value_changed?
}
end
預設情況下,地理編碼器使用谷歌作為查詢服務。它有許多有趣的功能,如距離計算或鄰近搜尋。有關更多資訊,請檢視地理編碼器 README 。