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_key
opció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.index
ya se agregó a las claves externas a partir de Rails stackoverflow.com/questions/39769981/…Puedes hacerlo de esta manera:
o usar
t.belongs_to
como alias parat.references
No puede agregar
foreign_key: true
a 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_table
bloque de esta manera:fuente
foreign_key: true
líneas a las referencias fue lo que me hizo tropezar. Agregaradd_foreign_key
y especificar el nombre de la columna para esos hizo el truco.schema_plus
gema. 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.references
dice "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_key
función le dice a la base de datos que aplique la integridad referencial aquí.add_foreign_key
lí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: ERROR
al intentar agregar una restricción de clave externa a una tabla que no existe.belongs_to
es sólo un alias parareferences
y 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
references
acepte la:as
opción, pero puede crear sus columnas manualmente ...fuente