Попробуйте это:
if ((testItem & FlagTest.Flag1) == FlagTest.Flag1)
{
// do something
}
В основном, Ваш код спрашивает, если установка обоих флагов совпадает с установкой одного флага, который является, очевидно, ложью. Код выше оставит только набор битов Flag1, если это будет установлено вообще, затем сравнит этот результат с Flag1. rake db:migrate VERSION=0
Это работает, даже если вы используете более новые файлы миграции с метками времени.
Обновление: я только что протестировал это на Rails 3.2.1, и он все еще работает. Он запускает «неработающую» часть всех миграций, известных schema_migrations
. Я понятия не имею, работало это на 3.1 или нет, но комментарий ниже указывает, что эта функция была сломана в то время.
В дополнение к (правильному) решению jdl, приведенному выше, есть еще один хитрый способ добиться этого - выполнить rake db: rollback STEP = 1000000
, где 1000000
- это большое количество, превышающее количество миграций, которое у вас когда-либо будет. Будет выполнен откат до 1000000
раз или сколько раз вы укажете STEP
.
Это в меру хакерское, но вы можете сделать запрос, чтобы найти первую ВЕРСИЮ в schema_migrations, а затем вызвать rake db: migrate: down, чтобы получить эту ВЕРСИЮ (я предполагаю, что вы хотите чтобы упаковать сценарий «сброса» для вашего приложения).
Это, конечно, потребует, чтобы методы down во всех ваших миграциях работали правильно.