61 votes

Comment forcer ActiveRecord à recharger une classe?

Je suis de la création d'un groupe de migrations, dont certains sont standard "create table" ou "modifier le tableau des" migrations, et de modifier les données. Je suis avec mon réel ActiveRecord modèles de modifier les données, à la:

Blog.all.each do |blog|
  update_some_blog_attributes_to_match_new_schema
end

Le problème est que si je charge le Blog de la classe, puis modifier la table, puis utiliser le Blog de la classe de nouveau, les modèles, les anciennes définitions de table, et ne peut pas sauver de la nouvelle table. Est-il un moyen de recharger les classes et leurs définitions d'attributs afin que je puisse les réutiliser?

139voto

James A. Rosen Points 25774

La réponse est oui!

 Blog.reset_column_information
 

5voto

Vitalie Points 680

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.

3voto

Jon Smock Points 3921

Créer de nouvelles instances:


Old_blogs = Blog.all

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

New_blogs = Blog.all # cela devrait être rechargé ou vous pouvez utiliser le .reload sur ceci

# changer les informations, charger l'ancien dans le nouveau # ex.

Old_blogs.each faire | blog | New_blogs.find (blog.id) .title = blog.title end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X