2016-08-03 15 views
0

Ich habe ein Buchungsmodell mit location_pickup und location_dropoff, auf dem ich die Geocoder-Funktion verwenden möchte. Ich habe das Geocoder-Mapping im Modell deklariert (siehe unten), aber irgendwie wird nur die letzte Deklaration (location_pickup) in der Datenbank aktualisiert. Was genau mache ich hier falsch?Mehrere Adressen in Schienen Geocoder Ausgabe

class Booking < ActiveRecord::Base 
belongs_to :user 

geocoded_by :location_dropoff, :latitude => :location_dropoff_latitude, :longitude => :location_dropoff_longitude 

geocoded_by :location_pickup, :latitude => :location_pickup_latitude, :longitude => :location_pickup_longitude 

after_validation :geocode, if: :location_dropoff_changed? 
after_validation :geocode, if: :location_pickup_changed? 

validates :location_pickup, presence: true 
validates :location_dropoff, presence: true 
end 

zwei Methoden versucht zu definieren, wie Lorenzo vorgeschlagen, aber es funktioniert immer noch nicht

class Booking < ActiveRecord::Base 
    before_validation :geocode_location_dropoff 
    before_validation :geocode_location_pickup 
    belongs_to :user 
    def geocode_location_dropoff 
     geocoded_by :location_dropoff, 
      latitude: :location_dropoff_latitude, 
      longitude: :location_dropoff_longitude 
     end 
     def geocode_location_pickup 
     geocoded_by :location_pickup, 
      latitude: :location_pickup_latitude, 
      longitude: :location_pickup_longitude 
     end 

     after_validation :geocode, if: :location_dropoff_changed? 
     after_validation :geocode, if: :location_pickup_changed? 

     validates :location_pickup, presence: true 
     validates :location_dropoff, presence: true 
    end 

Antwort

1

Wenn das zweite Mal Aufruf geocoded_by Sie die Methode geocoded_by in Ihrem Modell neu zu definieren.

a = 1 
a = 2 

Und wie Sie sich vorstellen können, wenn Sie nur den Wert haben wird ‚a‘ nennen es ‚2‘: Was Sie equals so ziemlich das folgende tun. Wenn Sie möchten, dass Ihr Modell mehrere "Dinge" geocodiert, würde ich vorschlagen, dass Sie zwei verschiedene Klassen erstellen (eine heißt LocationDropoff und die andere LocationPickup), sodass Sie sie unabhängig voneinander geocodieren können und sie zur Booking-Klasse gehören. Andernfalls sollten Sie eigene Methoden definieren, um unabhängig voneinander unterschiedliche Attribute zu geolocaten, und Sie können dafür Callbacks verwenden.

+0

Danke! Wie definiere ich meine eigene Methode und geolocate unabhängig. Ich habe zwei verschiedene Methoden erstellt und versucht, sie vorher zu validieren. Es funktioniert jedoch nicht (fügte der Frage den müden Code hinzu) – Mayank