Is it possible to set default value in a migration based upon another field's value?

I'm familiar with setting a field's default in the create_table within
a migration via :default => some value. However, what I'm looking for
is to be able to set the default value based upon the value from a
different field/column. I'm not sure if this is possible or not, so
any help would be greatly appreciated. The exact scenario is that I'm
using devise for my authentication and I've extended it to have a
login_id field in addition to the email field. I'd like to default it
to the value of the email field when the user first creates their
account and they can later choose to change its value if they decide
they would rather use some value other than their email address. I
know I can override the controller that devise uses to set this value,
but I'm trying to see if I have any options that will not require me
to create an overridden controller.

Thanks in advance for any guidance and help.


Perhaps you can use a before_create callback on the user (account?) model.

class User
   before_create :default_login_id

   def default_login_id
     self.login_id ||=


Rob Biedenharn

You can put active record code into a migration:

default = Model.find(:first).name rescue nil

:default => default