Domanda

Sto creando un gruppo di migrazioni, alcune delle quali sono standard "Crea tabella" o " modifica tabella " migrazioni e alcune delle quali modificano i dati. Sto usando i miei attuali modelli ActiveRecord per modificare i dati, alla:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

Il problema è che se carico la classe Blog, quindi modifico la tabella, quindi uso nuovamente la classe Blog, i modelli hanno le definizioni della tabella precedente e non possono salvare nella nuova tabella. C'è un modo per ricaricare le classi e le loro definizioni degli attributi in modo da poterle riutilizzare?

È stato utile?

Soluzione

La risposta è sì!

Blog.reset_column_information

Altri suggerimenti

Ho sempre usato nuovi modelli nelle migrazioni

    MyBlog < ActiveRecord::Base
      set_table_name 'blogs'
    end

    def self.up
      MyBlog.all.each do |blog|
        update_some_blog_attributes_to_match_new_schema
      end
    end

Ma Blog.reset_column_information è più conveniente.

Crea nuove istanze:


Old_blogs = Blog.all
  

# cambia / modifica la tabella db qui

New_blogs = Blog.all # this should be reloaded or you could use the .reload on this
  

# cambia informazioni, carica vecchio in nuovo

es.

Old_blogs.each do |blog|
  New_blogs.find(blog.id).title = blog.title
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top