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
有沒有辦法避免這種情況?爲什麼我的模型不會重複使用第一個數據庫請求中包含的數字?
在此先感謝!
*碰他的頭*範圍問題... – christianblais