Rieles db: la relación de migración no existe

Tengo tales modelos:

estudiante:

class Student < ActiveRecord::Base has_many :participations, dependent: :destroy has_many :subject_item_notes, dependent: :destroy has_many :payments, dependent: :destroy has_many :subject_items, dependent: :destroy, through: :participations has_many :subject_items, dependent: :destroy validates :first_name, :last_name, presence: true accepts_nested_attributes_for :subject_items end 

y subject_item:

 class SubjectItem  (teacher) { where('teacher_id IS ? or teacher_id = ?', nil, teacher) } end 

Y la migración:

 class AddStudentToSubjectItems < ActiveRecord::Migration def change add_reference :subject_items, :student, index: true end end 

Pero cuando hago rake db:migrate

Me sale error

 == 20151121045103 AddStudentToSubjectItems: migrating ========================= -- add_reference(:subject_items, :student, {:index=>true}) rake aborted! StandardError: An error has occurred, this and all later migrations canceled: PG::UndefinedTable: ERROR: relation "subject_items" does not exist : ALTER TABLE "subject_items" ADD "student_id" 

En estado de pánico, estaba reconstruyendo la base de datos muchas veces y probablemente hice un poco de desorden en el esquema … 🙁

En cuanto a ahora trato de hacer:

rake db: drop luego rake db: create y rake db: migrate, y luego este error se produce.

Primero, revisa tu secuencia de migraciones. Parece que está intentando crear una referencia antes de crear la tabla subject_items .

Primero debe crear la tabla de alumnos, luego la tabla subject_items y luego agregar la referencia. O alternativamente, agregue las columnas de referencia usted mismo al crear las tablas, que es todo lo que hace add_reference .

Además, tienes dos relaciones de Student a SubjectItem .

 has_many :subject_items, dependent: :destroy, through: :participations has_many :subject_items, dependent: :destroy 

Necesita su primera relación para que ActiveRecord pueda identificar la correcta primero para consultar y luego para su migración. Piense en la consulta que se generará si llamó a @student.subject_items por ejemplo. ¿Pasará por la primera relación o la segunda?

Sus relaciones deben ser ex:

 has_many :participation_subject_items, dependent: :destroy, through: :participations has_many :subject_items, dependent: :destroy