Sure enough, I see that exact information in the Migration documentation. http://api.rubyonrails.org/classes/ActiveRecord/Migration.html It works great now. Thank you.
Adam On Thu, Feb 11, 2010 at 3:33 PM, Jarin Udom <ja...@robotmo.de> wrote: > Oh also "Item.reset_column_information" needs to be after the > add_column and before the Item.all.each if you are adding the column > and manipulating the data in the same migration. If it is 2 separate > migrations, just put it at the top of the 2nd one. > > Jarin Udom > Robot Mode LLC > http://robotmo.de > > On Feb 11, 1:30 pm, Jarin Udom <ja...@robotmo.de> wrote: > > You need to put "Item.reset_column_information" at the top of the > > migration so Rails reloads the altered table. > > > > Jarin Udom > > Robot Mode LLChttp://robotmo.de > > > > On Feb 11, 12:58 pm, Adam Stegman <adam.steg...@gmail.com> wrote: > > > > > > > > > I tried doing the whole thing in one migration - adding the column and > > > setting the value, and I got the exact same behavior with this > > > migration: > > > > > class AddActiveToItems < ActiveRecord::Migration > > > def self.up > > > add_column :items, :active, :boolean > > > Item.all.each do |item| > > > if item.item_status == Item::STATUS_REVIEW or item.item_status > > > == Item::STATUS_IN_PROGRESS > > > item.active = false > > > else > > > item.active = true > > > end > > > item.save! > > > puts "id: #{item.id}, active: #{item.active}" > > > puts "id: #{item.id}, active: #{Item.find(item.id).active}" > > > end > > > end > > > > > def self.down > > > remove_column :items, :active > > > end > > > end > > > > > for db:migrate: > > > id: 1, active: true > > > id: 1, active: > > > > > for db:migrate:up: > > > id: 1, active: true > > > id: 1, active: true > > > > > There must be something weird about this data manipulation. > > > > > On Feb 11, 1:35 pm, Adam Stegman <adam.steg...@gmail.com> wrote: > > > > > > Sorry, I should have mentioned - the migration before it is one where > > > > that active column is added. The migration after alters a column in a > > > > different table. The column is definitely added before this migration > > > > runs. > > > > > > On Feb 11, 1:23 pm, Adam Stegman <adam.steg...@gmail.com> wrote: > > > > > > > I have a migration that saves correctly to the database when it's > run > > > > > by itself through db:migrate:up, but not when it's run with other > > > > > migrations through db:migrate. > > > > > > > class SetActiveOnExistingItems < ActiveRecord::Migration > > > > > def self.up > > > > > Item.all.each do |item| > > > > > if item.item_status == Item::STATUS_REVIEW > > > > > item.active = false > > > > > elsif item.item_status == Item::STATUS_IN_PROGRESS > > > > > item.active = false > > > > > else > > > > > item.active = true > > > > > end > > > > > puts "setting item_id = #{item.id} to active = > #{item.active}" > > > > > item.save! > > > > > puts "setting item_id = #{item.id} to active = > #{item.active}" > > > > > item = Item.find(item.id) > > > > > puts "setting item_id = #{item.id} to active = > #{item.active}" > > > > > end > > > > > end > > > > > > > def self.down > > > > > Item.all.each {|item| item.active = nil; item.save(false)} > > > > > end > > > > > end > > > > > > > The output during db:migrate is: > > > > > setting item_id = 1 to active = true # (this one is before the > save) > > > > > setting item_id = 1 to active = true # (this one is after the save) > > > > > setting item_id = 1 to active = # (this one is after the > lookup) > > > > > ... > > > > > > > During db:migrate:up, it works as expected: > > > > > setting item_id = 1 to active = true > > > > > setting item_id = 1 to active = true > > > > > setting item_id = 1 to active = true > > > > > ... > > > > > > > For some reason, the data appears to not be actually committed to > the > > > > > database during db:migrate, while it is during db:migrate:up. > There's > > > > > no exception thrown by save!, no indicator that I can see that the > > > > > save is unsuccessful. Even if it was, why would it only be > > > > > unsuccessful during a regular migration run, and not during > > > > > db:migrate:up? > > > > > > > Has anyone seen this before? Do you have any idea what could cause > > > > > this? > > > > > > > Thanks. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-t...@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscr...@googlegroups.com<rubyonrails-talk%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-t...@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.