Ruby on rails 使用:通过外键关系包含嵌套表
CertProgramItem有多个:cert\u时间表。 CertSchedule属于以下项:注册费项目,:外键=>'注册费项目id',:类别名称=>'item' 从CertProgramItem开始,我希望在一个查询中获得所有CertSchedule及其相关表(以避免n+1问题)。我的第一个问题是:Ruby on rails 使用:通过外键关系包含嵌套表,ruby-on-rails,Ruby On Rails,CertProgramItem有多个:cert\u时间表。 CertSchedule属于以下项:注册费项目,:外键=>'注册费项目id',:类别名称=>'item' 从CertProgramItem开始,我希望在一个查询中获得所有CertSchedule及其相关表(以避免n+1问题)。我的第一个问题是: cpi_arr = CertProgramItem.find(:all, :include => :cert_schedules, :order => :id) 但是,这没有获取属
cpi_arr = CertProgramItem.find(:all, :include => :cert_schedules, :order => :id)
但是,这没有获取属于CertSchedules集合的Item类的成员
我已修改查询:
cpi_arr = CertProgramItem.find(:all, :include => {:cert_schedules => :items}, :order => :id)
及
但我得到了类似ActiveRecord::ConfigurationError的错误:找不到名为“items”的关联;可能是您拼错了?“或ActiveRecord::ConfigurationError:找不到名为'reg\u fee\u items'的关联;可能是您拼错了?第二个
有没有办法在一个查询中获得这个嵌套的外键关联?以下是有关CertSchedule关联的一些更详细的信息:
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'
此查询现在已成功返回我期望的结果。经验教训:
- 使用模型中的外键名,而不是实际的表名
- 关联中的多个项目需要用方括号括起来[]
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] }])