views:

87

answers:

1

I am a Rails beginner and trying to understand how rails migration works. I have created a scaffold like:

script/generate scaffold Item col1:string col2:text
rake db:migrate

I would like to add another col4 using migration:

I created a migration as follows:

class AddCol4 < ActiveRecord::Migration
  def self.up
        add_column      :items, :col4, :numeric
        Item.reset_column_information
  end

  def self.down
        remove_column   :items, :col4
  end
end

When I run rake db:migrate the new column gets added. However the view is out of sync. Am I supposed to manually add the new column to the view? Is there a way to auto-regenerate the model/view using the new table columns?

Sorry, it is a basic question but from my experience with other frameworks, it should have been automatic. The rails guide on migration does not make this obvious regarding how the synchronization is supposed to work after you perform a migration.

+1  A: 

Unfortunately you will need to modify the view manually. The view is created by running the script/generate scaffold command. Migrations only change the database. Technically, you can rerun the scaffold command and have it regenerate the view. It will ask you if you want to overwrite the previous file, however, if you go this route, you will still need to specify ALL of the columns that you want. You can't simply add some here and there.

If you are early in development, then you might take this route. Simply run

script/destroy scaffold Item

and then rerun

script generate scaffold Item col1:string col2 string col3:numeric

There are some dynamic scaffolding extensions available such as ActiveScaffold if you are creating something that only a few users will see, but I would recommend doing the HTML yourself as it will always come out the way you want.

I can't seem to find any of the other dynamic scaffolding plugins. There used to be quite a few...

Topher Fangio