Turnuvalar için bir ray uygulaması üzerinde çalışıyorum. Üç modelleri bu sorguyu ile çalışan im var: tournaments_controller şov eylemi olarakRaylar 3 Bir sorguda birden fazla tablo var.
class Player < ActiveRecord::Base
validates :name, :uniqueness => true
has_and_belongs_to_many :tournaments
class Tournament < ActiveRecord::Base
belongs_to :tournament_type
has_and_belongs_to_many :players
has_many :player_matches, :dependent => :destroy
class PlayerMatch < ActiveRecord::Base
belongs_to :player_one, :class_name => "Player", :foreign_key => "player_one"
belongs_to :player_two, :class_name => "Player", :foreign_key => "player_two"
, im aşağıdaki sorguyu çağırarak: turnuvalar ve player_matches tek yapılan ederken
Tournament.where(:id => params[:id]).includes(:player_matches, :players).first()
katılmak
Player Load (0.4ms) SELECT `players`.*, t0.tournament_id as the_parent_record_id FROM `players` INNER JOIN `players_tournaments` t0 ON `players`.id = t0.player_id WHERE (t0.tournament_id = 14)
Player Load (0.2ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 5 LIMIT 1
Player Load (0.2ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 9 LIMIT 1
Player Load (0.2ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 1 LIMIT 1
Player Load (0.1ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 8 LIMIT 1
Player Load (0.1ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 3 LIMIT 1
Player Load (0.1ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 2 LIMIT 1
Player Load (0.1ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 7 LIMIT 1
Player Load (0.1ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 6 LIMIT 1
Player Load (0.1ms) SELECT `players`.* FROM `players` WHERE `players`.`id` = 4 LIMIT 1
hepsi bir sorguda çekilebilecek şekilde Nasıl bu kadar değiştirebilirsiniz: kodum onlara bağlı olduğu için, oyuncular, ayrı ayrı sorgulanan?
savurma bunu çökmez hangi sözdizimi öğreneceğim elde etmektir benzer bir şey N + 1 sorunumu çözdü, ancak sizin için çalışıp çalışmadığından emin değilim. 'Includes' çağrınızı değiştirirseniz (: player_matches =>: players) 'a ne olur? –
Ayrıca, bunu dışarı atmak ... geliştirme modunda değil, üretim modunda kullanılan SQL'i aradığınızdan emin olun. –
Bunu üretim modunda çalıştırmamıştım. Bu çıktı, sunucu konsolundan, günlüklerde olduğu gibi, konsoldan geliyor, bu yüzden doğru çıktıya sahip olduğumu biliyorum :). – agmcleod