2012-04-26 4 views
3

Rails 애플리케이션의 성능을 향상시키는 방법을 배우려하고 있으며, 내가 바라는 첫 번째 단계는 열심히로드하는 것입니다.레일 3에서 열심히로드 중입니까?

내가 열심히로드 할 수있는 곳을 보여주는 글 머리 기호 젬을 구성했는데, 어떻게 도움을 얻을 수 있는지 잘 모르겠습니다!

예 로그는 다음과 같습니다 뛰어

2012-04-26 15:59:34 
0.0.0.0:3000http://0.0.0.0:3000/animals 
N+1 Query detected 
    Animal => [:client] 
    Add to your finder: :include => [:client] 
N+1 Query method call stack 
    N+1 Query method call stack 
    /Users/dannymcclelland/Projects/premvet/app/views/animals/index.html.erb:26:in `block in _app_views_animals_index_html_erb__2796162405947806753_70316525286320' 
    /Users/dannymcclelland/Projects/premvet/app/views/animals/index.html.erb:22:in `_app_views_animals_index_html_erb__2796162405947806753_70316525286320' 
    /Users/dannymcclelland/Projects/premvet/app/controllers/animals_controller.rb:7:in `index'2012-04-26 15:59:34[WARN] user: dannymcclelland 
0.0.0.0:3000http://0.0.0.0:3000/animals 
Unused Eager Loading detected 
    Animal => [:id, :AnimalName, :Species] 
    Remove from your finder: :include => [:id, :AnimalName, :Species]2012-04-26 16:00:56 

의 선은 다음과 같습니다

N+1 Query detected 
Animal => [:client] 
Add to your finder: :include => [:client] 

Unused Eager Loading detected 
Animal => [:id, :AnimalName, :Species] 
Remove from your finder: :include => [:id, :AnimalName, :Species] 

내가 확신하고있는 무슨의 정의는 무엇인가 '파인더'. 보기에있는 블록인지 또는 컨트롤러에있는 블록인지 여부 다음과 같이 컨트롤러 인 나를 밖으로 점프 로그의 첫 번째 섹션을 촬영

:

def index 
@animals = Animal.page(params[:page]).per_page(15) 

respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @animals } 
end 
end 

모델 : 나는 따라서 이상한 레거시 데이터베이스를 사용하고

class Animal < ActiveRecord::Base 
    self.table_name = 'animal' 
    self.primary_key = 'PVID' 

    attr_accessible :AddedBy, :Age, :AnimalBFAmount, :AnimalBalance, :AnimalName, :Archive, :BillType, :Breed, :ChronicStatus, :Class, :Classification, :ClientKey, :Colour, :Date1, :DateOfBirth, :DateofBirth, :Dead, :DiaryQueue, :DiscField, :DrugsAtCost, :DrugsNoVAT, :ESDAmount, :ESDType, :FNote, :FirstRegisteredDate, :Height, :IDNumber, :Insured, :InsuredWith, :IsClient, :IsClientDate, :IsMaster, :LastBilledAmount, :LastBilledDate, :LastConsDate, :LastContributionDate, :LastPaidDate, :LastWeightDate, :Locked, :LoyaltyMultiplier, :LoyaltyPoints, :MR_Flag_0, :MR_Flag_1, :MR_Flag_10, :MR_Flag_11, :MR_Flag_12, :MR_Flag_13, :MR_Flag_14, :MR_Flag_15, :MR_Flag_2, :MR_Flag_3, :MR_Flag_4, :MR_Flag_5, :MR_Flag_6, :MR_Flag_7, :MR_Flag_7, :MR_Flag_8, :MR_Flag_9, :Mileage, :Neutered, :NextApptDate, :ORT, :OldSex, :Opt_Flag_0, :Opt_Flag_1, :Opt_Flag_2, :Opt_Flag_3, :Opt_Flag_4, :Opt_Flag_5, :Opt_Flag_6, :Opt_Flag_7, :PVID, :PreferredContact, :PreferredUser, :Ref1, :RefPrac, :ReferredBy, :SSDType, :SeenInPeriod, :SendBill, :Sex, :SiteAnimal, :Species, :Status, :SurcAmount, :SurcType, :SurgeryNumber, :TBU, :TOSAmount, :TOSDrugs, :TOSFees, :TOSType, :Weight 

    belongs_to :client, :foreign_key => 'ClientKey' 
    has_many :clinicals, :foreign_key => 'PVID' 
    has_many :labs, :foreign_key => 'PVID' 
    has_many :consults, :foreign_key => 'pvid' 
    has_many :sheets, :foreign_key => 'PVID' 

    default_scope :order => "Dead ASC, AnimalName ASC" 
end 

주 열 이름 등

보기에는 다음이 포함됩니다.

<% @animals.includes(:client).each do |animal| %> 
    <tr> 
    <td><%= animal.id %></td>  
    <td><%= animal.AnimalName %></td> 
    <td><%= link_to animal.client.Surname, animal.client %></td>  
    <td><%= animal.Species %></td> 
    <td><%= animal.Breed %></td> 
    <td><%= animal.Dead %></td>  
    <td><%= link_to 'Show', animal %></td> 
    </tr> 
<% end %> 

그래서 '추천'보기에 다른 권장 열을 추가해야합니까? 아니면 다른 곳?

도움이 될 것입니다. 컨트롤러에서

답변

3

, 당신은 클라이언트 포함하도록 쿼리를 업데이트 할 :

@animals = Animal.includes(:client).page(params[:page]).per_page(15) 
+0

다른 아무것도 후 변화 하는가를, 또는만큼 간단하다? – dannymcc

+0

간단합니다. Rails는 두 개의 쿼리 만 실행합니다. 하나는 Animal 테이블에 대한 것이고 다른 하나는 Client 테이블에 대한 쿼리입니다. 보기에서 바꿀 필요가없는 것 –

+0

그래서 : client는 관련된 테이블의 이름입니까? 내가 찾고있는 열을 각각 나열해야한다고 생각했습니다! 오케이. – dannymcc