Что стоит за методом «соединения» Active Record?

Есть ли разница между синтаксисами

"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 голоса | спросил Adriano di Lauro 8 MarpmThu, 08 Mar 2012 18:14:08 +04002012-03-08T18:14:08+04:0006 2012, 18:14:08

1 ответ


0

Во втором выводе журнала вы видите не более длинный запрос, а ActiveRecord, проверяющий схему, чтобы он мог творить чудеса, которые он выполняет. Это отражение очень часто происходит в процессе разработки, поэтому любые изменения в схеме автоматически фиксируются, не беспокоясь о перезапуске процессов (будь то консоль или веб-сервер).

Если вы посмотрите на строки, начинающиеся с Game Load, то здесь происходит запрос, который вас интересует, и он почти идентичны.

ответил Derek Harmel 8 MarpmThu, 08 Mar 2012 19:00:51 +04002012-03-08T19:00:51+04:0007 2012, 19:00:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132