Entonces tengo una create_table como esta para Cursos en una escuela:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
pero quiero que haga referencia a otros dos cursos como:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
¿Puedo decir lo siguiente?
t.references :transferrable_as, :as=> :course
ruby-on-rails
associations
migration
el espejo
fuente
fuente

foreign_keyopción en la creación de la tabla de esta manera, se genera un error que dice que la misma tabla que estoy creando no existe ... Entonces sospecho que no es realmente compatible con la API oficial.indexya se agregó a las claves externas a partir de Rails stackoverflow.com/questions/39769981/…Puedes hacerlo de esta manera:
o usar
t.belongs_tocomo alias parat.referencesNo puede agregar
foreign_key: truea esas dos líneas de referencias. Si desea marcarlos como claves externas en el nivel de la base de datos, debe realizar una migración con esto:Actualizar
En Rails 5.1 y superior, puede agregar la clave externa en la migración en el
create_tablebloque de esta manera:fuente
foreign_key: truelíneas a las referencias fue lo que me hizo tropezar. Agregaradd_foreign_keyy especificar el nombre de la columna para esos hizo el truco.schema_plusgema. Los documentos add_reference de Rails no mencionan opciones de: referencias.references:opción (a diferencia de,t.references¿no sería eso solo relevante en el nivel del modelo, con las consideraciones de Foreign_key siendo atendidas poradd_foreign_key?)t.referencesdice "agregue un campo a esta tabla que sea la clave principal de otra tabla". Lareferences:opción le dice de qué tabla es una clave primaria (necesaria si no está claro por el nombre del campo). Laadd_foreign_keyfunción le dice a la base de datos que aplique la integridad referencial aquí.add_foreign_keylíneas se encargan de informar a la base de datos qué es una clave externa de qué. Elreferences:parámetro no hace nada.Creo que este hilo tiene una forma diferente más de Rails: Scaffolding ActiveRecord: dos columnas del mismo tipo de datos
En la migración:
fuente
PG::UndefinedTable: ERRORal intentar agregar una restricción de clave externa a una tabla que no existe.belongs_toes sólo un alias parareferencesy por lo tanto tiene la misma funcionalidad exacta.Como respuesta adicional a esta pregunta, el modelo debe tener la siguiente línea para completar la asociación:
fuente
No creo que
referencesacepte la:asopción, pero puede crear sus columnas manualmente ...fuente