ActiveRecord не поддерживает добавление внешних ключей независимым от базы данных способом, поэтому вам придется делать это с кодом, специфичным для БД.Вот пример для MySQL:
class AddForeignKeyToUsers < ActiveRecord::Migration
def self.up
execute 'alter table users add constraint user_role foreign key user_role_idx (role_id) references roles (id) on delete set null on update cascade'
end
def self.down
execute 'alter table users drop foreign key user_role'
end
end
Для индексов вы можете использовать add_index
- например, так:
add_index(:users, :name)
Редактировать: Обновленный ответ, чтобы уточнить, чтоиндексы и внешние ключи обрабатываются по-разному.