20 Feb
duccio

duccio il 20 February 2008 parla di Rails Snippet

Rails: migrazioni e update_attributes

Spesso può capitare di inserire una nuova colonna in una migrazione e volerla popolarla immediatamente. Se provate a farlo noterete che nessuna modifica verrà effettuata. Per consentire l’aggiornamento dovete fare una chiamata al Base#reset_column_information in modo che il modello abbia l’ultimo schema disponibile dopo l’aggiunta della colonna.

    1 # Modelli iniziali
    2 
    3 class Post < ActiveRecord::Base
    4     has_many :comments
    5 end
    6 
    7 class Comments < ActiveRecord::Base
    8     belongs_to :post
    9 end
   10 
   11 # Migrazione
   12 
   13 class AddCommentsCounter < ActiveRecord::Migration
   14     def self.up
   15         add_column :posts, :comments_count, :integer
   16         Comment.reset_column_information
   17         Post.find(:all).collect do |post|
   18             post.update_attributes(:comments_count => post.comments.count)
   19         end
   20     end
   21 
   22     def self.down
   23         remove_column :posts, :comments_count    
   24     end
   25 end
   26 
   27 # Aggiungi counter_cache
   28 
   29 class Comments < ActiveRecord::Base
   30     belongs_to :post, :counter_cache => true
   31 end
   32 
   33 # Commento sul counter_cache
   34 # Ogni volta che usi post.comments_count non fai nessun accesso al db ma usi la cache
   35 
   36 #Filippo di ateapick
   37 
   38 
   39 

1 Commento a “Rails: migrazioni e update_attributes”

  1. Davide il 14 December 2009 alle 13:41 dice:

    Sei semplicemente un grande!!! Grazie mille!

    Davide

Scrivi un commento