Μπορώ να έχω reverse_geocoded_by και geocoded_by ταυτόχρονα σε ένα μοντέλο; ράγες

ψήφοι
0

Ψάχνω να επιτρέψει μοντέλο μου να γεωκωδικοποιηθούν από full_street_address και reverse_geocoded_by : γεωγραφικό πλάτος και : γεωγραφικό μήκος , ώστε να μπορώ να καλέσετε Address.near και να τους είτε με τον ένα ή τον άλλο τρόπο.

Αυτό φαίνεται να λειτουργεί, αλλά θα μπορούσε αυτή η προσέγγιση προκαλέσει σημαντικό ζήτημα, ή είναι σωστό;

Εδώ είναι κωδικός μου:

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
Δημοσιεύθηκε 13/03/2018 στις 18:51
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
1

Λειτουργεί αλλά είναι περιττή. Αυτό συμβαίνει γιατί με geocoded_byέχετε την πλήρη διεύθυνση και αποκτήστε το γεωγραφικό πλάτος και μήκος, η οποία είναι η περίπτωσή σας. Αλλά reverse_geocoded_byσας δίνει τη δυνατότητα να αποκτήσετε μια διεύθυνση από το γεωγραφικό πλάτος και μήκος, αλλά το έχετε ήδη.

Απλά αφαιρέστε το reverse_geocoded_byκαι αν θέλετε να χρησιμοποιήσετε το γεωγραφικό πλάτος και μήκος απλά να καλέσετε τα πεδία στη βάση δεδομένων σας: self.latitudeκαι self.longitude, για παράδειγμα, η οποία θα πρέπει να έχουν καθορίσει (και η υπηρεσία γεωκωδικοποίηση είναι η συμπλήρωση για εσάς).

Απαντήθηκε 13/03/2018 στις 22:13
πηγή χρήστη

ψήφοι
2

Ναι, μπορείτε να το χρησιμοποιήσετε, από προεπιλογή θα αντικαταστήσει αν δίνοντας τη διεύθυνση και lat / LNG διευθύνσεις.

Μπορείτε να χωριστεί σε δύο κατηγορίες και καλέστε Address.near([:lat, :lng])πολύ αργότερα μετά την σώσει.

μοντέλα

- /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

Ελεγκτής

   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
Απαντήθηκε 14/03/2018 στις 08:15
πηγή χρήστη

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