Если вы хотите сделать это только с одним SQL-запросом, используйте group_by :
all_grouped = WF.all(:select => 'feature_id, status').group_by(&:status)
Это вернет вам OrderedHash с двумя парами ключ / значение (при условии, что статус либо0 или 1).Ключом каждой пары будет статус, а значением будет массив экземпляров WF, имеющих этот статус.
Вы можете дополнительно манипулировать возвращаемым OrderedHash , используя любой Enumerable метод (например, sort, sort_by, map и т. д.)
Чтобы получить вывод, который вы хотите в качестве a, b, вам необходимо добавить следующие строки:
a = all_grouped.select{ |k, v| k == 1 }[0].last.map(&:feature_id) # select WFs with status == 1 and keep only the feature attribute
b = all_grouped.select{ |k, v| k == 0 }[1].last.map(&:feature_id) # same with status == 0