2013-01-07 36 views
0

请任何人都帮我:Rails包含多个表

使用Rails我开发了一个应用程序。

模式这个样子的:

class Score < ActiveRecord::Base 
     belongs_to :song 
     belongs_to :user 
    end 

    class Song < ActiveRecord::Base 
     has_one :gsong 
     has_many :scores 
    end 

    class Gsong < ActiveRecord::Base 
     belongs_to :song 
    end 

    class user < ActiveRecord::Base 
     has_many :scores 
    end 

而且我ScoresController

class scoresController < ApplicationController 

    def index 
    id = current_user.id 
    @scores = score.where(:user_id => id) 
     render :json => { 
       :scores => @scores.as_json(:include => {:gsong => { :include => { :song => { :only => [:title, :album]}}, :only => [:artwork]}}, :only => [:song_id, :score]), 
} 
end 

它工作正常功能,但它使太多的查询数据库中的象下面这样:

 score Load (0.1ms) SELECT `scores`.* FROM `scores` WHERE `scores`.`user_id` = 3 
     Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` WHERE `gsongs`.`id` = 8 LIMIT 1 
     Song Load (0.1ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` = 8 LIMIT 1 
     Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` WHERE `gsongs`.`id` = 2 LIMIT 1 
     Song Load (0.1ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` = 2 LIMIT 1 
     Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` WHERE `gsongs`.`id` = 1 LIMIT 1 
     Song Load (0.1ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` = 1 LIMIT 1 
     Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` WHERE `gsongs`.`id` = 11 LIMIT 1 
     Song Load (0.1ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` = 11 LIMIT 1 
     Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` WHERE `gsongs`.`id` = 12 LIMIT 1 
     Song Load (0.1ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` = 12 LIMIT 1 
     Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` WHERE `gsongs`.`id` = 23 LIMIT 1 
     Song Load (0.1ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` = 23 LIMIT 1 

如何获取将这个数据与单个或两个查询,如:

 Gsong Load (0.1ms) SELECT `gsongs`.* FROM `gsongs` 

    Song Load (0.3ms) SELECT `songs`.* FROM `songs` WHERE `songs`.`id` IN (8,2,1,11,12,23) 

回答