aboutsummaryrefslogtreecommitdiffstats
path: root/guides
diff options
context:
space:
mode:
authorKatrina Owen <katrina.owen@gmail.com>2012-07-13 22:48:32 +0200
committerKatrina Owen <katrina.owen@gmail.com>2012-10-10 23:44:43 +0200
commita1d2f693776952e1f6ca7b347919047dbb4617f2 (patch)
tree14d2f0e07031e325110e933acc3965708b83e5ab /guides
parentecf460e7c40e7a38b6a548261e8d052849f3b313 (diff)
downloadrails-a1d2f693776952e1f6ca7b347919047dbb4617f2.tar.gz
rails-a1d2f693776952e1f6ca7b347919047dbb4617f2.tar.bz2
rails-a1d2f693776952e1f6ca7b347919047dbb4617f2.zip
Expand caveat about models in migrations (rails guide)
This is an attempt to address issue #6939, where an earlier migration added a column to the database, and a later migration uses a model and references that column. When both migrations were run together with `rake db:migrate` the column information in memory still referenced the old table structure. Running the migrations separately fixed this, as a new connection was then established before referencing the model. Explicitly calling `reset_column_information` is a more reliable workaround.
Diffstat (limited to 'guides')
-rw-r--r--guides/source/migrations.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/guides/source/migrations.md b/guides/source/migrations.md
index 67538b85e8..57db14f30c 100644
--- a/guides/source/migrations.md
+++ b/guides/source/migrations.md
@@ -889,6 +889,27 @@ class AddFuzzToProduct < ActiveRecord::Migration
end
```
+There are other ways in which the above example could have gone badly.
+
+For example, imagine that Alice creates a migration that selectively
+updates the +description+ field on certain products. She runs the
+migration, commits the code, and then begins working on the next feature,
+which is to add a new column +fuzz+ to the products table.
+
+She creates two migrations for this new feature, one which adds the new
+column, and a second which selectively updates the +fuzz+ column based on
+other product attributes.
+
+These migrations run just fine, but when Bob comes back from his vacation
+and calls `rake db:migrate` to run all the outstanding migrations, he gets a
+subtle bug: The descriptions have defaults, and the +fuzz+ column is present,
+but +fuzz+ is nil on all products.
+
+The solution is again to use +Product.reset_column_information+ before
+referencing the Product model in a migration, ensuring the Active Record's
+knowledge of the table structure is current before manipulating data in those
+records.
+
Schema Dumping and You
----------------------