Bir modelde aynı anda reverse_geocoded_by ve geocoded_by olabilir mi? Raylar

oy
0

Benim modeli izin vermek için arıyorum coğrafi kodlaması tarafından full_street_address ve reverse_geocoded_by enlem: ve : boylam ben bir ya da diğer yoluyla ya onları Address.near arayıp olsun böylece.

Bu iş gibi görünüyor ama bu yaklaşım potansiyel soruna neden olabilir ya da doğru mu?

İşte benim kod:

class Address < ApplicationRecord
  geocoded_by :full_street_address
  after_validation :geocode
  reverse_geocoded_by :latitude, :longitude

  def full_street_address
    self.street + self.city + self.country
  end
end
Oluştur 13/03/2018 saat 18:51
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
1

O inşaat ama gereksiz bu. Bunun nedeni ile geocoded_bysize durumdur enlem ve boylamı, tam bir adresinizin olması ve elde ederiz. Ama reverse_geocoded_bybir enlem ve boylam bir adres elde etmek izin verir, ancak zaten sahip.

Sadece kaldırmak reverse_geocoded_byve enlem ve boylam kullanmak istiyorsanız sadece veritabanındaki alanlar çağırır: self.latitudeve self.longitudetanımladığınız (ve coğrafi kodlama hizmeti sizin için doldurulmasıdır) örneğin.

Cevap 13/03/2018 saat 22:13
kaynak kullanıcı

oy
2

Evet, bunu kullanabilirsiniz, varsayılan olarak eğer vererek adresi ve enlem / Ing adreslerini üzerine yazılır.

Sen iki ayrı sınıfa ayrılır ve çağırabilir Address.near([:lat, :lng])kurtarmak çok sonradan sonra.

Modeller

- /model/address.rb
   class Address < ApplicationRecord
      #any association/validations here

      geocoded_by :full_street_address

      #by default it will save full address to address field. 
      reverse_geocoded_by :latitude, :longitude do |obj,results|
        if geo = results.first
            #customize as you want
              obj.street  = geo.address.split(',')[0]
              obj.city    = geo.city
              obj.zip     = geo.postal_code
              obj.state   = geo.state
        end
      end

      def full_street_address
         self.street + self.city + self.country
      end
   end

- /model/address/with_address.rb
   class Address::WithAddress < Address
      after_validation :geocode
   end

- /model/address/with_lat_lng.rb
   class Address::WithLatLng < Address
     after_validation :reverse_geocode
   end

kontrolör

   address = Address::WithLatLng.create(latitude: 40.5236803, longitude: -80.2249546)
   # returns: will save lat/lng and address/city/state/zip fields saved from api
   address.full_street_address
   #or
   address = Address::WithAddress.create(address: "601 fake st.", city: "brooklyn", state: "ny", zip: "11220")
   # returns: will save address and latitude:, longitude: will fetch from api.
   address.full_street_address
Cevap 14/03/2018 saat 08:15
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more