Разбейте свои действия на несколько таблиц и постройте их из нескольких моделей.
Например:
таблица Activity_types:
Имя
активность за столом
activity_type_id
Идентификатор пользователя
[общие поля]
таблица activity_details
activity_id
ключ
значение
Где вы используете данные о деятельности для хранения не общих элементов, по одному на строку.
Вы потеряете простоту отдельной модели / таблицы для каждого действия, но вы получите унифицированную модель деятельности, в которую можно добавить несколько методов, облегчающих выборку «подробных» данных, возможно, перегрузку #method_missing? или что-то.
У вас все равно будет более одного набора запросов, но у вас не будет пятидесяти, в итоге получится что-то вроде:
выбрать * из действий, где user_id = 1;
выберите * из типов деятельности, где идентификатор в (...)
выберите * из Activity_Details, где Activity_id в (...)
Вы получите больше возвращаемых строк, просто потому что у вас будет несколько строк подробностей для каждого действия, но я предполагаю, что в целом это будет быстрее.