Je travaille avec une API qui fournit des données d'arrivée de bus. Pour chaque requête, je récupère (entre autres) une liste des routes desservant l'arrêt en question. Par exemple, si la liste inclut le résultat pour les itinéraires de bus n ° 1, 2 et 5, je sais que ceux-ci servent à cet arrêt.Comment puis-je augmenter un groupe d'objets et de relations ActiveRecord dans Rails?
J'ai une relation many-to-many établie entre Route et Stop, et je veux vérifier dynamiquement et mettre à jour ces associations à chaque requête. Il n'y a pas de "liste maîtresse" des routes desservant qui s'arrête, donc cela semble être le meilleur moyen d'obtenir ces données.
Je crois que la façon dont je le fais maintenant est très inefficace:
# routes is an array of [number, destination] that I build while iterating over the data
routes.uniq.each do |route|
number = route[0]
destination = route[1]
r = Route.find_by_number_and_destination(number, destination)
if !r
r = Route.new :number => number, :destination => destination
r.save
end
# I have to check if it already exists because I can't find a way
# to create a uniqueness constraint on the join table with 2 foreign keys
r.stops << stop unless r.stops.include? stop
end
En fait, je dois faire 2 choses pour chaque itinéraire que je trouve: 1) Créer si elle ne fonctionne pas existe déjà, 2) Ajoute une relation à l'arrêt en cours s'il n'existe pas déjà. Existe-t-il un meilleur moyen de le faire, par exemple en récupérant un paquet de données en mémoire et en effectuant une partie du traitement du côté de l'application, afin d'éviter la multitude d'appels de base de données que je suis en train de faire ?
Il est plus rapide aussi longtemps que vous l'utilisez en mode "batch" ... –