2011-08-12 3 views
0

Un CertProgramItem a_many: cert_schedules. A CertSchedule belongs_to: reg_fee_item,: foreign_key => 'reg_fee_item_id',: class_name => 'Item'Utilisation: inclure avec les tables imbriquées via les relations foreign_key

À partir de la CertProgramItem, je veux tous les CertSchedules et leurs tables connexes dans une requête (pour éviter le n + 1 problème). Ma première requête était:

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

Cependant, cela n'a pas récupérer les membres de la classe d'objet qui appartiennent à la collection de CertSchedules.

J'ai modifié la requête:

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

et

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

mais je reçois des erreurs comme ActiveRecord :: ConfigurationError: Association nommés 'articles' n'a pas été trouvé; »ou ActiveRecord :: ConfigurationError: l'association nommée« reg_fee_items »n'a pas été trouvée, peut-être que vous l'avez mal orthographiée pour la 2ème

Existe-t-il un moyen d'obtenir cette association de clé étrangère imbriquée dans une requête? ?

Répondre

1

Voici quelques informations plus détaillées sur les 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' 

Ma dernière version de la requête ressemble à ceci:

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

Cette requête renvoie maintenant avec succès ce que j'attendais. Leçons apprises:

  • Utilisez le nom de la clé étrangère du modèle, et non le nom de la table.
  • Plusieurs éléments d'une association doivent être entourés de crochets [].
Questions connexes