2010-10-27 17 views
1

J'ai dans mon shop.rb:Mise à jour de latitude géocodage et la longitude adresse à chaque fois est mis à jour

def geocode_address 
    if !address_geo.blank? 
    geo=Geokit::Geocoders::MultiGeocoder.geocode(address_geo) 
    errors.add(:address, "Could not Geocode address") if !geo.success 
    self.lat, self.lng = geo.lat,geo.lng if geo.success 
    end 
end 

# Checks whether this object has been geocoded or not. Returns the truth 
def geocoded? 
    lat? && lng? 
end 

Et dans mon shops_controller.rb:

def update 
@shop = Shop.find(params[:id]) 
if @shop.update_attributes(params[:shop]) 
    flash[:notice] = "Successfully saved." 
    redirect_to shop_path(@shop, :type => @shop.shop_type) 
else 
    render :action => :edit 
end 
end 

Maintenant, lorsque l'utilisateur crée d'abord l'entrée, l'adresse est géocodé, avec latitude et longitude enregistrées dans la base de données.

Mais lorsque l'utilisateur met à jour l'adresse, la latitude et la longitude ne seront plus géocodées, et donc toujours en utilisant l'ancienne latitude et longitude qui est la première sauvegarde.

Comment écrire pour que Rails répète le géocodage à chaque fois qu'une entrée est mise à jour?

Je ne peux pas dépendre seulement de l'adresse parce qu'il y a un bogue dans geokit qui quand j'essaye d'afficher plusieurs cartes basées sur l'adresse, seulement le dernier est montré.

J'utilise Geokit, gmaps, Google Maps ...

Merci.

Répondre

1

je mets dans mon modèle:

before_validation_on_update :geocode_address 
0

Si l'utilisateur change son adresse, ne pouvez-vous pas la gérer de la même manière qu'une nouvelle adresse? Vous avez essentiellement 2 nouvelles adresses dont vous avez juste besoin pour lier l'adresse nouvellement créée avec le compte de l'utilisateur et tout devrait fonctionner.

+0

Non, c'est pas l'adresse de l'utilisateur. C'est l'adresse d'un magasin. Disons qu'au départ l'adresse d'une boutique est enregistrée avec des informations sur la ville et le pays, le géocode sera basé sur cette ville et ce pays. Mais quand il est mis à jour avec une adresse plus précise avec le nom de la rue, alors le géocodage devrait mettre à jour la longitude et la latitude. – Victor