मैं एक मॉडल में एक ही समय में 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

हाँ, आप इसे उपयोग कर सकते हैं, डिफ़ॉल्ट रूप से यह करता है, तो पता और अक्षांश / एलएनजी देने के पते लिख देगा।

आप दो वर्गों में विभाजित और कॉल कर सकते हैं 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