Find_or_create, race-condition & optimistick locking & WebAPI

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs