2011-08-12 50 views
0

CertProgramItem has_many:cert_schedules。 一個CertSchedule belongs_to的:reg_fee_item,:foreign_key => 'reg_fee_item_id',:CLASS_NAME => '項目'使用:通過foreign_key關係包含嵌套表

與CertProgramItem開始,我想所有CertSchedules及其相關表中的一個查詢(避免N + 1問題)。我的第一個查詢:

cpi_arr = CertProgramItem.find(:all, :include => :cert_schedules, :order => :id) 

然而,這並不能獲取項目類的屬於CertSchedules的集合成員。

我已經修改了查詢:

cpi_arr = CertProgramItem.find(:all, :include => {:cert_schedules => :items}, :order => :id) 

cpi_arr = CertProgramItem.find(:all, :include => {:cert_schedules => :reg_fee_items}, :order => :id) 

,但我得到,比如ActiveRecord :: ConfigurationError錯誤:協會命名爲 '項' 沒有被發現;也許你拼錯了嗎?「或ActiveRecord :: ConfigurationError:找不到名爲'reg_fee_items'的關聯;或許你拼錯了它? ?

回答

1

下面是對CertSchedule assocciations一些更詳細的信息:

class CertSchedule < ActiveRecord::Base 
    belongs_to :cert_program_item 
    belongs_to :reg_fee_item, :foreign_key => 'reg_fee_item_id', :class_name => 'Item' 
    belongs_to :start_term, :class_name => 'SchoolTerm', :foreign_key => 'start_term_id' 

我最新查詢的版本是這樣的:

cpi_arr = CertProgramItem.find(:all, :include => [:cert_tier, {:cert_schedules => [:reg_fee_item,:start_term] }]) 

此查詢現在已成功返回我所期望的內容。經驗教訓:

  • 使用模型中的外鍵名稱,而不是實際的表名稱。
  • 關聯中的多個項目需要用方括號[]括起來。