Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

348
Views
Rails: Cómo modificar datos usando migraciones por cambio en el esquema

Tengo las siguientes dos migraciones:

Uno, agregue la columna contextual_page_number a la tabla de transcripts :

 class AddContextualPageNumberToTranscripts < ActiveRecord::Migration[5.2] def change add_column :transcripts, :contextual_page_number, :integer, default: 1 end end

En segundo lugar, cambiar el valor de la columna agregada anterior contextual_page_number según el valor de otra columna:

 class ChangePageOffsetAndContextualPageNumberOfTranscripts < ActiveRecord::Migration[5.2] def up Firm.all.find_in_batches do |group| group.each do |firm| Apartment::Tenant.switch(firm.tenant) do Transcript.where.not(page_offset: 0).each do |transcript| transcript.update( contextual_page_number: ((transcript.page_offset - 1) * -1), page_offset: 1 ) end end end end end def down .. end end

Después de ejecutar la migración, obtengo un error de atributo desconocido contextual_page_number .

== 20211108132509 AddContextualPageNumberToTranscripts: migrando ============= -- add_column(:transcripts, :contextual_page_number, :integer, {:default=>1}) -> 0.0095s == 20211108132509 AddContextualPageNumberToTranscripts: migrado (0.0096s) ====

== 20220113095658 ChangePageOffsetAndContextualPageNumberOfTranscripts: ¡migración de carriles anulada! StandardError: se produjo un error, esta y todas las migraciones posteriores se cancelaron:

atributo desconocido 'contextual_page_number' para Transcripción.

Incluso probé reset_column_information , pero no tuve suerte:

 Apartment::Tenant.switch(firm.tenant) do Transcript.connection.schema_cache.clear! Transcript.reset_column_information .. end

Cualquier pista sería de gran ayuda, gracias.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Como se mencionó en una de las respuestas, probé reset_column_information justo después de add_column , pero eso no funcionó. Finalmente, SQL al rescate..

 sql_cmd = "UPDATE transcripts SET contextual_page_number = ((page_offset - 1) * -1), page_offset = 1 WHERE page_offset != 0" Transcript.connection.execute(sql_cmd)
over 4 years ago · Santiago Trujillo Report

0

Necesita dos archivos de migración. Primero, intente ejecutar la migración y verifique schema.rb para las transcripts de la tabla y verifique que la columna contextual_page_number recién agregada se esté agregando o no.

Una vez que esté seguro de que se agregó su nueva columna, vuelva a crear una nueva migración como, por ejemplo: MigrateTransriptsCloningsData , y luego agregue los cambios deseados en el bloque up , luego ejecute db:migrate para actualizar los cambios requeridos.

Mi elección sería agregar una nueva tarea de rake y ejecutarla. como bundle exec rake migrate_transcripts_data:start en lugar de mantener esa lógica en db/migrate/your_new_migration_file, la elección es suya.

over 4 years ago · Santiago Trujillo Report

0

reset_column_information debería ser la forma correcta de resolver este tipo de problema si desea utilizar modelos en una migración. Sin embargo, esto no está exento de problemas.

Sospecho que el problema es que lo estás llamando demasiado tarde de alguna manera. Póngalo primero en el método up de la segunda migración o después de add_column en la primera migración.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!