Ciao a tutti, vorrei sottoporti questo problema per ottenere una
soluzione quanto più pulita.
class Place < ActiveRecord::Base
def self.find_or_create_by_latlon(lat, lon)
place_id = call_external_webapi
result = Place.where(:place_id => place_id).limit(1)
result = Place.create(:place_id => place_id, … ) if result.empty?
#!
result
end
end
Poi da qualche parte in un model o controller
p = Post.new
p.place = Place.find_or_create_by_latlon(XXXXX, YYYYY) # race-condition
p.save
Il codice funziona come ci si aspetta solo se “Place.where” restituisce
un record, se viene seguito “Place.create” il result restituito è spesso
“nil” perché non viene restituito in tempo (ma è comunque eseguito).
Quello che vorrei è una specie di timeout bloccante che dicesse: “se il
webservice non risponde entro tot secondi metti il place_id di default”
Spero di essermi spiegato bene.
Ciao
Luigi