Question

Je crée un ensemble de migrations, dont certaines sont des balises "Créer une table" standard. ou "modifier la table" migrations, dont certaines modifient les données. J'utilise mes modèles ActiveRecord actuels pour modifier les données, comme suit:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

Le problème est que si je charge la classe Blog, puis modifie la table, puis utilise à nouveau la classe Blog, les modèles ont les anciennes définitions de table et ne peuvent pas être enregistrés dans la nouvelle table. Est-il possible de recharger les classes et leurs définitions d'attributs pour que je puisse les réutiliser?

Était-ce utile?

La solution

La réponse est oui!

Blog.reset_column_information

Autres conseils

J'ai toujours utilisé de nouveaux modèles dans les migrations

    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

Mais Blog.reset_column_information est plus pratique.

Créer de nouvelles instances:

Old_blogs = Blog.all
  

# modifier / modifier la table de la base de données ici

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

# modifier les informations, charger l'ancien dans le nouveau

ex.

Old_blogs.each do |blog|
  New_blogs.find(blog.id).title = blog.title
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top