relacion rails muchos llaves foraneas ruby-on-rails activerecord

ruby-on-rails - muchos - llaves foraneas ruby on rails



¿Cómo rastrea Rails qué migraciones se han ejecutado para una base de datos? (1)

De acuerdo con Rails doc: http://guides.rubyonrails.org/migrations.html

"Active Record rastrea qué migraciones ya se han ejecutado, de modo que todo lo que tiene que hacer es actualizar su fuente y ejecutar rake db: migrate".

¿Cómo hace ActiveRecord esto? ¿Dónde almacena Active Record los datos?

Sospecho que esto podría ser almacenado en la base de datos en sí? En una mesa en alguna parte

En mi máquina de desarrollo, ejecuté todas las migraciones. Luego copié la base de datos de producción usando mysqldump. Luego ejecuté "rake db: migrate: status", muestra correctamente las migraciones que deben ejecutarse en la base de datos de producción.

Solía ​​pensar que ActiveRecord realiza un seguimiento de la última migración ejecutada utilizando la marca de tiempo. Pero creo que esto no es cierto porque ActiveRecord ejecuta correctamente las migraciones "antiguas" fusionadas desde otra rama de código.

¿Podría alguien con conocimiento interno de esto elaborar? Gracias


Rails crea una tabla en su base de datos denominada schema_migrations para realizar un seguimiento de las migraciones que se han ejecutado.

La tabla contiene una sola columna, version . Cuando Rails ejecuta una migración, toma los dígitos iniciales en el nombre del archivo de la migración e inserta una fila para esa "versión", lo que indica que se ha ejecutado. Si schema_migrations esa migración, Rails eliminará la fila correspondiente de schema_migrations .

Por ejemplo, ejecutar un archivo de migración denominado 20120620193144_create_users.rb insertará una nueva fila con una versión de 20120620193144 en la tabla schema_migrations .

Eres libre en cualquier momento de introducir migraciones con versiones anteriores. Los raíles siempre ejecutarán cualquier migración nueva para la que no haya una fila correspondiente en schema_migrations . Los dígitos 001_blah.rb no tienen que ser una marca de tiempo, puede llamar a su migración 001_blah.rb . Las versiones anteriores de Rails usaban este formato y usaban la numeración secuencial para las migraciones recién generadas. Las versiones posteriores cambiaron a marcas de tiempo para ayudar a evitar que varios desarrolladores generen migraciones de forma independiente con el mismo número.