バスの到着データを提供する API を使用しています。リクエストごとに、(とりわけ) どのルートが問題の停留所にサービスを提供しているかのリストを取得します。たとえば、リストにバス ルート #1、2、および 5 の結果が含まれている場合、それらがこの停留所にサービスを提供していることがわかります。
Route と Stop の間に多対多の関係が設定されており、リクエストごとにこれらの関連付けを動的にチェックして更新したいと考えています。どのルートがどの停留所にサービスを提供するかを示す「マスター リスト」は存在しないため、このデータを取得するにはこれが最善の方法のようです。
私が今やっている方法は非常に非効率的だと思います:
# 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
基本的に、見つけたルートごとに 2 つのことを行う必要があります。1) まだ存在しない場合は作成し、2) 現在の停留所がまだ存在しない場合は関係を追加します。
これを行うためのより良い方法はありますか?たとえば、現在行っている多数のデータベース呼び出しを回避するために、メモリ内のデータを大量に取得し、アプリ サーバー側で処理の一部を実行することはありますか?