2011-08-31 49 views
1

假設我有這個簡單的應用程序的工作:預緊協會

# model 
class Project 
    has_many :numbers 

    def my_numbers 
    numbers 
    end 
end 

# controller 
class ProjectController 
    def index 
    @projects = Project.includes(:numbers) 
    end 
end 

在我的第一個觀點,沒有任何問題。我直接打電話給這個協會,所有的號碼都已經被加載了。

@projects.each do |project| 
    project.numbers 
    # no probleme here. Hit the cache of included numbers. 
end 

這裏是日誌

Project Load (0.8ms) SELECT "projects".* FROM "projects" 
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2) 

但隨着第二個例子,從項目的方法調用中主叫號碼,每次調用my_numbers觸發一個新的數據庫調用,如你可以看到下面:

@projects.each do |project| 
    project.my_numbers 
end 

這裏是日誌

Project Load (0.8ms) SELECT "projects".* FROM "projects" 
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2) 
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 1 
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 2 

有沒有辦法避免這種情況?爲什麼我的模型不會重複使用第一個數據庫請求中包含的數字?

在此先感謝!

回答

1

我已經在Rails 3.0.9中試過這段代碼,它不會執行你描述的行爲。你確定號碼沒有觸發回調?

+1

*碰他的頭*範圍問題... – christianblais