Использование: включить с вложенными таблицами через отношения foreign_key - PullRequest
0 голосов
/ 12 августа 2011

CertProgramItem has_many: cert_schedules.CertSchedule принадлежит_to: reg_fee_item,: foreign_key => 'reg_fee_item_id',: class_name => 'Item'

Начиная с CertProgramItem, я хочу получить все CertSchedules и их связанные таблицы в одном запросе (чтобы избежать+1 проблема).Мой первый запрос был:

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

Однако это не привело к извлечению членов класса Item, которые принадлежат к коллекции 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: Ассоциация с именем 'items' не найдена;возможно, вы ошиблись? "или ActiveRecord :: ConfigurationError: Ассоциация с именем 'reg_fee_items' не была найдена; возможно, вы ошиблись? 2-й.

Есть ли способ получить эту вложенную ассоциацию с внешним ключом водин запрос?

1 Ответ

1 голос
/ 15 августа 2011

Вот более подробная информация о ассоциациях 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'

Моя последняя версия запроса выглядит следующим образом:

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

Этот запрос теперь успешно возвращает то, что я ожидал,Извлеченные уроки:

  • Используйте имя внешнего ключа из модели, а не фактическое имя таблицы.
  • Несколько элементов в ассоциации должны быть заключены в квадратные скобки [].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...