2012-03-08 6 views
4

最初のクエリを生成する構文Active Recordの 'join'メソッドの背景は何ですか?

"Game.joins(:round).where('rounds.league_id = 1')" 

"Game.joins(:round).where(:rounds => {:league_id => 1})" 

の間に差がある:

Game Load (7.5ms) 
SELECT "games".* 
FROM "games" INNER JOIN "rounds" ON "rounds"."id" = "games"."round_id" 
WHERE (rounds.league_id = 1) 

第一長いを生成するのに対し:

SQL (1.7ms) 
    SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull 
    FROM pg_attribute a LEFT JOIN pg_attrdef d 
    ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
    WHERE a.attrelid = '"rounds"'::regclass 
    AND a.attnum > 0 AND NOT a.attisdropped 
    ORDER BY a.attnum 

Game Load (8.8ms) 
    SELECT "games".* 
    FROM "games" 
    INNER JOIN "rounds" ON "rounds"."id" = "games"."round_id" 
    WHERE "rounds"."league_id" = 1 

私はコミュニティに参加しました。これは私の最初の質問です

答えて

4

2番目のログ出力では、より長いクエリではなく、ActiveRecordがスキーマを検査できるように検査していますそれがする魔法をやる。この反映は開発中に非常に頻繁に起こり、プロセスの再起動(コンソールまたはWebサーバーのような)を心配することなく、スキーマへの変更が自動的に選択されます。

Game Loadで始まる行を見ると、これは興味のあるクエリが起きる場所で、ほぼ同じです。

関連する問題