0

django から来て、関連するオブジェクトのデータもフェッチされるようにクエリを実行するときに結合を行う select_related と呼ばれるものがあります。

例えば

# rails + select_related
p = Person.where(job: 1).select_related("job_name")
# so the return query list has objects that 
# can call person.job.job_name without another query
# because selected_related did a join on jobs table

レール/アクティブレコードでこれをどのように行いますか?

4

1 に答える 1

5

Rails では、includes結合テーブルを処理するために使用するのがより一般的です。左外部結合 (where 条件が結合されたテーブルを参照する必要がある場合) またはselect * from jobs where id IN (1,3,4,5) n+1 最適化問題を解決するなどのもう 1 つのクエリを実行できます。

あなたの場合、私は:

p = Person.where(job: 1).includes(:jobs)
job = p.job.job_name

これでも 2 つのクエリを使用しますが、これは最適化されたユース ケースではありません (このケースは最適化に値しません)。

people = Person.where(status: 'active').includes(:jobs)
people.each {|p| puts p.job.job_name}

この場合でも、2 つのクエリしか実行されません。

于 2013-11-06T00:37:11.597 に答える