私は、バス到着データを提供するAPIを使って作業しています。すべてのリクエストに対して、私はどのルートが問題のストップに役立つかのリストを(他のものの中でも)返す。たとえば、リストにバスルート#1,2、および5の結果が含まれている場合、その停止を処理することがわかります。Railsで複数のActiveRecordオブジェクトと関係をアップセットするにはどうすればよいですか?
私は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)現在のストップに関係を追加します。
私は現在やっているデータベース呼び出しの数を避けるために、メモリ内のデータの束を取得し、アプリケーションサーバー側でいくつかの処理を行うなど、より良い方法がありますか?
よりその80%高速化と言います... –