Say you want to add a foreign key
company_id to the
users table, and you want to have a
NOT NULL constraint on it. If you already have data in
users, you will have to do this in multiple steps.
class AddCompanyIdToUsers < ActiveRecord::Migration def up # add the column with NULL allowed add_column :users, :company_id, :integer # make sure every row has a value User.find_each do |user| # find the appropriate company record for the user # according to your business logic company = Company.first user.update!(company_id: company.id) end # add NOT NULL constraint change_column_null :users, :company_id, false end # Migrations that manipulate data must use up/down instead of change def down remove_column :users, :company_id end end