我刚刚更改了操作中competitors_controller.rb
从...这是渴望加载做我认为它应该做什么?
def audit
@review = Review.find(params[:review_id])
@competitor = @review.competitors.find(params[:id])
respond_with(@review, @competitor)
end
...到...
def audit
@review = Review.find(params[:review_id])
@competitor = Competitor.find(params[:id], :include => {:surveys => {:question => [:condition, :precondition]}})
respond_with(@review, @competitor)
end
...在页面上被加载超时。
底层的关联是:
class Competitor < ActiveRecord::Base
has_many :surveys
end
class Survey < ActiveRecord::Base
belongs_to :competitor
belongs_to :question
delegate :dependencies, :precondition, :condition, :to => :question
end
class Question < ActiveRecord::Base
has_many :dependancies, :class_name => "Question", :foreign_key => "precondition_id"
belongs_to :precondition, :class_name => "Question"
has_many :surveys, :dependent => :delete_all
end
基本上,audit.html.haml页面加载:
@competitor.surveys.{sorting, etc}.each do |s|
s.foo, s.bar
s.{sorting, etc}.dependant_surveys.each do |s2|
s2.foo, s2.bar
s2.{sorting, etc}.dependant_surveys.each do |s3|
s3.foo, s3.bar, etc etc
如果我窝太远,页面没有之前加载时间出。
我需要知道的是,我是否已经在competitor_controllers.rb
理论上加速了以下两种方法中的每一种,在构建audit.html.haml
时经常调用这些方法?
class Survey < ActiveRecord::Base
def dependant_surveys
self.review.surveys.select{|survey| self.dependencies.include?(survey.question)}
end
end
class Question < ActiveRecord::Base
def dependencies
Question.all.select{|question| question.precondition == self}
end
end
(我说“理论上”,因为我知道这个问题也可以用基准的回答。但在此之前我走到这一步我想检查我的理论正确的。)